I) OBJETIVOS
Mergesort El algoritmo mergesort consta de tres pasos:
III) PRÁCTICAS DE LABORATORIO Implementar el mergesort /*
* Ordenamiento por mergesort.
*/
static void mergeSort(ref int[] a, ref int[] r, int izq, int der)
{
if (izq < der)
{
int centro = (izq + der) / 2;
mergeSort(ref a,ref r,izq,centro);
mergeSort(ref a, ref r, centro+1, der);
mezclar(ref a,ref r,izq,centro+1,der);
}
}
static void mergeSort(ref int[] a)
{
int[] r = new int[a.Length];
mergeSort(ref a,ref r,0,a.Length-1);
}
static void mezclar(ref int[] a, ref int[] r, int posIzq, int posDer, int posFin)
{
int finIzq = posDer - 1;
int posAux = posIzq;
int numElementos = posFin - posIzq + 1;
// Bucle principal
while (posIzq<=finIzq && posDer <=posFin)
if (a[posIzq] < a[posDer])
r[posAux++] = a[posIzq++];
else
r[posAux++] = a[posDer++];
// Copiar el resto de la primera mitad
while (posIzq <= finIzq)
r[posAux++] = a[posIzq++];
// copiar resto de la segunda mitad
while (posDer <= posFin)
r[posAux++] = a[posDer++];
// copiar el arreglo temporal al original
for (int i = 0; i < numElementos; i++, posFin--)
a[posFin] = r[posFin];
} IV) TAREA:
V) REFERENCIAS BIBLIOGRÁFICAS
|