Sitio WEB Recomendado
Estructura de Datos click here
prof lauro soto
<code>
- include <stdio.h>
- include <conio.h>
- include <stdlib.h>
- include<iostream.h>
- define MAX 10
struct lista {
int numero; struct lista *sig;
}; typedef struct lista LISTATYPE; typedef LISTATYPE * LISTAPTR;
void Crea Lista? (LISTAPTR *); void A Ver La Lista? (LISTAPTR); void Free Lista? (LISTAPTR *); void MS (int, int, LISTAPTR *); void mezcla (int, int, int, int, LISTAPTR *);
void main () {
LISTAPTR inicio= NULL; clrscr(); //randomize(); Crea Lista(&inicio); //printf(“\n\nNumeros Capturados para Ordenar:\n”); //A Ver La Lista(inicio); MS(0,MAX-1,&inicio); printf(“\n\nNumeros ordenados:\n”); A Ver La Lista(inicio); Free Lista(&inicio); getch();
}
void Crea Lista (LISTAPTR *inicio) {
int i,n,A[MAX];
LISTAPTR nuevo, temp;
cout<<”\nMETODO DE MERGE SORT\n\n”;
cout«”Cuantos Numeros Deseas Capturar : “;cin»n;
for (i=0; i<n; i++)
{
cout«”Capturar “<<”[“<<i<<”] : “;cin»A[i];
nuevo= (LISTAPTR) malloc(sizeof(LISTATYPE));
nuevo→sig= NULL;
nuevo→numero= A[i];
//random(n*n);
if (*inicio == NULL)
*inicio= nuevo;
else
{
temp= *inicio;
while (temp→sig != NULL)
temp= temp→sig;
temp→sig= nuevo;
}
}
}
void A Ver La Lista (LISTAPTR inicio) {
if (inicio != NULL)
{
printf(“\n %d “,inicio→numero);
A Ver La Lista(inicio→sig);
}
}
void Free Lista (LISTAPTR *inicio) {
LISTAPTR temp= *inicio;
if (*inicio != NULL)
{
Free Lista(&((*inicio)→sig));
free(temp);
}
}
void MS (int ini, int fin, LISTAPTR *inicio) {
int m, m1;
if (ini < fin)
{
m= (ini+fin)/2;
m1= m+1;
MS(ini,m,&(*inicio));
MS(m1,fin,&(*inicio));
mezcla(ini,m,m1,fin,&(*inicio));
}
}
void mezcla (int ini, int m, int m1, int fin, LISTAPTR *inicio) {
LISTAPTR ci, cj;
int i, j, k= 0, kC[MAX];
ci= cj= *inicio;
for (i=k; i<ini; i++,ci=ci→sig);
for (j=k; j<m1; j++ ,cj=cj→sig);
kC[k]= k;
while (i‹=m || j<=fin)
{
if (i > m)
{
kC[k]= cj→numero;
j++;
cj= cj→sig;
}
else
if (j > fin)
{
kC[k]= ci→numero;
i++;
ci= ci→sig;
}
else
if (ci→numero < cj→numero)
{
kC[k]= ci→numero;
i++;
ci= ci→sig;
}
else
{
kC[k]= cj→numero;
j++;
cj= cj→sig;
}
k++;
}
for (ci=*inicio,i=k-k; i<ini; i++,ci=ci→sig);
for (k=0; i<=fin; i++, k++,ci=ci→sig)
ci→numero= kC[k];
}
</code>