Primero debe saber que diciendo “en C” en su pregunta habló sobre la implementación.
La ordenación por fusión es un algoritmo de división y conquista.
- Divide repetidamente la matriz en dos mitades del mismo tamaño.
- Las instancias más pequeñas se resuelven
- La solución obtenida para las instancias más pequeñas se combina o combina para obtener la solución.
- ¿Por qué las funciones de límite superior e inferior en C ++ STL dan diferentes índices para el mismo número?
- ¿Puede una máquina Turing aceptar una cadena de longitud 2014? ¿Por qué este problema es indecidible?
- ¿Debería un desarrollador autodidacta centrarse en algoritmos o proyectos paralelos para conseguir un trabajo?
- ¿Qué temas en algoritmos modernos no están cubiertos en CLRS?
- ¿Cómo se ve una imagen después de que se somete repetidamente a un algoritmo de compresión con pérdida hasta que ya no se puede comprimir?
El desbordamiento de pila es bueno para este tipo de preguntas
Aqui no
#include
#define max 10
int a [10] = {10, 14, 19, 26, 27, 31, 33, 35, 42, 44};
int b [10];
fusión nula (int bajo, int medio, int alto) {
int l1, l2, i;
para (l1 = bajo, l2 = medio + 1, i = bajo; l1 <= medio && l2 <= alto; i ++) {
si (a [l1] <= a [l2])
b [i] = a [l1 ++];
más
b [i] = a [l2 ++];
}
mientras (l1 <= medio)
b [i ++] = a [l1 ++];
mientras que (l2 <= alto)
b [i ++] = a [l2 ++];
para (i = bajo; i <= alto; i ++)
a [i] = b [i];
}
tipo vacío (int bajo, int alto) {
int mid;
si (bajo <alto) {
medio = (bajo + alto) / 2;
tipo (bajo, medio);
ordenar (medio + 1, alto);
fusión (baja, media, alta);
} más {
regreso;
}
}
int main () {
int i;
printf (“Lista antes de ordenar \ n”);
para (i = 0; i <= max; i ++)
printf (“% d”, a [i]);
ordenar (0, max);
printf (“\ nLista después de ordenar \ n”);
para (i = 0; i <= max; i ++)
printf (“% d”, a [i]);
}