struct tipo_dato {
int num;
struct tipo_dato *sig;
};
struct tipo_dato *mergeSort(struct tipo_dato *lista) {
struct tipo_dato *lista1=NULL, *lista2=NULL, *listaOrd1=NULL, *listaOrd2=NULL, *listaOrd=NULL;
if (longitud_lista(lista) <= 1) {
return lista;
}
else {
//Este es el puntero a la primera mitad de la lista.
lista1 = lista;
//Obtenemos la segunda parte de la lista (la segunda mitad).
lista2 = obtener_lista2(lista);
//Ordenamos recursivamente cada mitad del algoritmo
listaOrd1 = mergeSort(lista1);
listaOrd2 = mergeSort(lista2);
//Mezclamos las dos mitades ordenadas previamente
listaOrd = mezclar(listaOrd1, listaOrd2);
return listaOrd;
}
}
Para ver el código de un ejemplo de uso del algoritmo y los resultados de la ejecución podéis visitar este enlace en Codepad:
http://codepad.org/B3EOCoi8
No hay comentarios:
Publicar un comentario