Está en la página 1de 7

Mergesort

PSEUDOCDIGO mtodo MergeSort(arreglo) //Primero se procede a dividir el arreglo, pero esto slo ser necesario cuando l tenga mnimo 2 elementos: si(arreglo tiene ms de 1 elemento) //Se hacen llamadas recursivas para dividir la primera y segunda mitad del arreglo . MergeSort(primera mitad del arreglo) MergeSort(segunda mitad del arreglo) //Se combinan las mitades Merge(mitad 1, mitad 2) fin (si) fin MergeSort

Mergesort
mtodo Merge(arreglo1, arreglo2)

//Se define un nuevo arreglo en el cual se almacenar la mezcla de los arreglos. define arregloMezcla //se inicializan 3 enteros que controlen la posicin en los arreglos 1, 2 y mezcla. i1, i2, i3 inicializados en 0
//Se empezar el proceso de mezcla y para ello habr que recorrer ambos arreglos. mientras(no se haya terminado de recorrer ningn arreglo)

Mergesort
/* A continuacin se compararn los datos de los arreglos 1 y 2 y se coloca en el arreglo de mezcla el dato menor. Si los datos son iguales, se colocar el dato del primer arreglo para garantizar la estabilidad del algoritmo (que no se intercambien elementos de igual valor) */ if (arreglo1[i1] == arreglo2[i2]) arregloMezcla[i3] = arreglo1[i1] incrementar i1, i3 fin (if) if (arreglo1[i1] < arreglo2[i2]) arregloMezcla[i3] = arreglo1[i1] incrementar i1, i3 fin (if)

Mergesort
if (arreglo1[i1] > arreglo2[i2]) arregloMezcla[i3] = arreglo1[i2] incrementar i2, i3 fin (if) Almacenar en arregloMezcla los elementos que no hayan sido almacenados an del arreglo 1 o 2 fin (while) fin (Merge)

Mergesort
Codigo #include<stdio.h> #include<stdlib.h> int i, j, ia, ib ,inicio , fin ,medio , a[10],c[10],ic, tam ; void sort(int , int ); void mergeArray (int , int, int ) ; main() { printf("entre numeros (10)\n"); for (i=0;i<10;i++) scanf ("%d", &a[i]); inicio=0;fin=9; sort(inicio,fin);

Mergesort
printf("array ordenado \n"); for(i=0;i<10;i++) { printf(" %d\n", a[i]); } void sort(int inicio, int fin) { int medio; if(inicio == fin) return; medio=(inicio+fin)/2; sort(inicio,medio); sort(medio+1,fin); mergeArray(inicio,medio,fin); }

Mergesort
void mergeArray(int inicio,int medio,int fin) { ia=inicio,ib=medio+1,ic=0; tam = fin-inicio+1; while(ia<=medio && ib<=fin){ if(a[ia]<a[ib]) c[ic++]=a[ia++]; else c[ic++]=a[ib++]; } while(ia<=medio) c[ic++]=a[ia++]; while(ib<=fin) c[ic++]=a[ib++]; for( i=0; i<tam; i++) a[inicio+i]=c[i]; }

También podría gustarte