Saltar al contenido

¿Cómo poner en práctica algoritmo de ordenación de mezcla en JavaScriptDec, algoritmo de ordenación 4thMerge fue inventado por John von Neumann en 1945. Es…

marzo 13, 2020

 

algoritmo de ordenamiento por mezcla fue inventado por John von Neumann en 1945.It es un algoritmo de ordenación eficiente utilizando un enfoque de divide y vencerás.

Ejemplo: [3,4,2,1]

1). En primer lugar, tenemos que dividir la matriz en trozos más pequeños.

left [ 3 , 4 ] right [ 2, 1 ]

[ 3 ] [ 4 ] [ 2 ] [ 1]

2). tenemos que combinar los trozos más pequeños para obtener el arreglo ordenado. 3

e 4 compara que ya se han ordenado 2 y 1 siguiente ponen 1 primera y segunda 2.

left [ 3 , 4 ] right [ 2, 1 ]

[ 3] [ 4 ] [ 2 ] [ 1]

[3, 4 ] [1 ,2 ]

Ahora comparan parte del índice izquierdo y el índice de parte 0 derecha de 3 0 que son y 1.

donde 1 es menor que 3 por lo quitamos 1 desde la parte derecha y empuje en la lista ordenada.

left [ 3 , 4 ] right [ 1, 2 ]

[ 3] [ 4 ] [ 2 ] [ 1]

[3, 4 ] [ 2 ]

sorted array [ 1 ]

nuevo 3 y que 2 compruebe y retire 2 desde la parte derecha y empuje en la lista clasificada

left [ 3 , 4 ] right [ 1, 2 ]

[ 3] [ 4 ] [ 2 ] [ 1]

[3, 4 ] [ ]

sorted array [ 1 ,2 ]

Ahora agregue la parte izquierda y la parte derecha con la lista ordenada. aplicación

left [ 3 , 4 ] right [ 1, 2 ]

[ 3] [ 4 ] [ 2 ] [ 1]

[3, 4 ] [ ]

sorted array [ 1 ,2 ,3, 4]

Algoritmo

Vamos a implementar un algoritmo de ordenamiento por mezcla en JavaScript.

function mergeSort(array,half = array.length/2){

if(array.length < 2){ return array // it means we no longer divide the array // into smaller chunks } const left = array.splice( 0,half ); //left part of the array return merger( mergeSort( left ),mergeSort( array ) ) }

En el código anterior estamos utilizando un método de empalme que elimina la parte izquierda de la array.so que la parte restante de la matriz es la parte derecha.

A continuación, tenemos que implementar una función de fusión que nos ayuda a combinar la parte izquierda y derecha de la matriz y devuelve la lista ordenada.

function merger(left, right) {
const arr = [ ];
while (left.length && right.length) {
if (left[ 0 ] < right[ 0 ]) { arr.push( left.shift( ) ) // remove from the left part and push into /he sorted array } else { arr.push( right.shift( ) ) // remove from the right part and push into /he sorted array } } return [ ...arr, ...left, ...right ]; }

código completo. Código

pluma de demostración

Probado utilizando moka y chai