44 lines
1.2 KiB
Plaintext
44 lines
1.2 KiB
Plaintext
entrada: array: arreglo de n datos; n: tamaño del arreglo
|
|
salida: arreglo ordenado
|
|
|
|
funcion mergesort(array, n)
|
|
correr_mergesort(array, 0, n - 1);
|
|
retorna array
|
|
fin funcion
|
|
|
|
funcion correr_mergesort(array, izquerda, derecha)
|
|
si izquerda != derecha entonces
|
|
medio = (izquerda + derecha) / 2
|
|
correr_mergesort(array, izquerda, medio)
|
|
correr_mergesort(array, medio + 1, derecha)
|
|
unir(array, izquerda, medio + 1, derecha)
|
|
fin si
|
|
fin funcion
|
|
|
|
funcion unir(array, previo_izquerda, previo_medio, derecha)
|
|
i = 0
|
|
izquerda = previo_izquerda
|
|
medio = previo_medio - 1
|
|
far_derecha = derecha - izquerda + 1
|
|
|
|
mientras que previo_izquerda <= medio y previo_medio <= derecha hacer
|
|
si array[previo_izquerda] < array[previo_medio] entonces
|
|
temp[i++] = array[previo_izquerda++]
|
|
sino
|
|
temp[i++] = array[previo_medio++]
|
|
fin si
|
|
fin mientras
|
|
|
|
mientras que previo_izquerda <= medio hacer
|
|
temp[i++] = array[previo_izquerda++]
|
|
fin mientras
|
|
|
|
mientras que previo_medio <= derecha hacer
|
|
temp[i++] = array[previo_medio++]
|
|
fin mientras
|
|
|
|
para i = 0 mientras que i < far_derecha con paso i = i + 1 hacer
|
|
array[izquerda + i] = temp[i]
|
|
fin para
|
|
fin funcion
|