¡Como en cualquier otro lenguaje de programación!
Puedes ver la demostración del algoritmo trabajando en el video
Mergesort es un algoritmo de estrategia de divide y vencerás, por lo que generalmente se implementa de forma recursiva.
En general, el caso base para el algoritmo es cuando tiene una matriz de tamaño 0 o 1. Aquí está ModifiedMergeSort, el caso base para esto es cuando le quedan k elementos, ordénelos usando el orden de inserción. Porque si tiene un número pequeño de datos (es decir, k elementos), la ordenación por inserción supera a MergeSort.
- ¿Qué tan difícil es aprender por sí mismo cómo codificar algoritmos eficientes?
- ¿El cerebro procesa imágenes exactamente como los algoritmos de visión AI y las CNN?
- Cómo hacer un motor de búsqueda usando un algoritmo
- ¿Existe tal cosa como un 'Algoritmo Maestro'?
- ¿Cuánto estrés se le da a los algoritmos y las estructuras de datos en el curso de pregrado en CMI? ¿Se enseña programación competitiva allí?
vacío ModifiedMergeSort (int A [], int p, int r, int k) {
si (r – p + 1> k) {
int q = (p + r) / 2;
ModifiedMergeSort (A, p, q, k);
ModifiedMergeSort (A, q + 1, r, k);
Fusionar (A, p, q, r);
}
más
InsertionSort (A, p, r);
}
fusión vacía (int A [], int p, int q, int r) {
int n1 = q – p + 1;
int n2 = r – q;
int * L = nuevo int [n1];
int * R = nuevo int [n2];
para (int i = 0; i <n1; ++ i)
L [i] = A [p + i];
para (int i = 0; i <n2; ++ i)
R [i] = A [q + 1 + i];
int k = p;
int i = 0;
int j = 0;
while (i <n1 && j <n2)
si (L [i] <= R [j])
A [k ++] = L [i ++];
más
A [k ++] = R [j ++];
mientras que (i <n1)
A [k ++] = L [i ++];
mientras que (j <n2)
A [k ++] = R [j ++];
eliminar [] L;
eliminar [] R;
}
InsertionSort vacío (int A [], int p, int r) {
usando std :: swap;
para (int i = p + 1; i <= r; ++ i) {
tecla int (A [i]);
int j (i – 1);
while (j> = p && tecla [j]>)
A [j– + 1] = A [j];
A [j + 1] = tecla;
}
}