Fusionar ordenado en JavaScript

Fusionar ordenado en JavaScript
La clasificación de fusiones divide la lista completa en sublistas o en sublistas "n" y continúa este proceso de manera recursiva hasta que cada subsists tenga un elemento. Una vez que se completa este proceso de "divide y conquistar", comienza a fusionar cada subsist para crear una lista ordenada.

Cómo funciona la clasificación de fusión

Ahora entenderemos el funcionamiento de la clasificación de fusiones con la ayuda de un ejemplo:

Consideremos otro ejemplo para el tipo de fusión donde tenemos un total de siete elementos (impares) en una matriz y los clasificaremos en orden ascendente:

[5, 7, 1, 4, 6, 3, 2]

Divide la matriz en dos subrayas

[5, 7, 1] y [4, 6, 3, 2]

Nuevamente, cada matriz se dividirá en dos subarrías

[5], [7, 1] y [4, 6], [3, 2]

Aquí de cuatro sub-matrices, una subrainal solo tiene un elemento, pero las otras tres matrices aún tienen más de un elemento, por lo que dividiremos aún más cada una de esas matrices en dos matrices.

[5], [7], [1], [4], [6], [3], [2]

Ahora el primer paso está completo ya que cada matriz solo tiene un elemento. Ahora compararemos los elementos de la matriz y fusionaremos estas matrices de elementos individuales en parejas.

[5, 7], [1, 4], [3, 6], [2]

Hacemos una comparación entre los elementos de la matriz de las dos primeras matrices y las dos últimas matrices y desplazamos los valores más pequeños al lado izquierdo y los valores mayores al lado derecho.

Se realizará una comparación entre los elementos de las dos primeras matrices y las dos dos matrices. Por ejemplo, las dos primeras matrices son [5,7] y [1,4]. 5 se comparará en primer lugar con 1 y luego a 4. Posteriormente, el segundo elemento que es 7 se someterá al mismo procedimiento y la matriz resultante será [1,4,5,7]. Ahora lidiaremos con las dos últimas matrices que son [3,6] y [2]. Después de la comparación, la matriz que obtenemos será [2,3,6].

[1, 4, 5, 7] [2, 3, 6]

Ahora tenemos dos matrices; [1,4,5,7] y [2,3,6]. Llamémoslos Arraya [1,4,5,7] y Arrayb [2,3,6] respectivamente.

En primer lugar, el primer elemento "1" de arraya se comparará con el segundo elemento "2" de arrayb y el número más pequeño "1"Será almacenado en la nueva matriz ordenada

[1]

En la próxima iteración, "2"Se comparará con el siguiente elemento"4" de arraya. El más pequeño "2"Será almacenado en la nueva matriz ordenada.

[1,2]

Esta vez, "4" de Arraya se comparará con el siguiente elemento "3" de Arrayb. Como "3" es más pequeño, por lo que se insertará en la nueva matriz ordenada.

[1,2,3]

Este procedimiento se realizará en cada elemento de ambas matrices y una vez que se comparen todos los elementos, la matriz resultante lo será; [1,2,3,4,5,6,7].

[1, 2, 3, 4, 5, 6, 7]

Fusionar ordenado en JavaScript

Como hemos aprendido cómo funciona Fusion Sort, ahora lo codificaremos en JavaScript.

Cree una función recursiva para dividir la matriz sin clasificar, la llamamos "Merge_sort". La función recursiva siempre tiene un caso base para detener el programa. Pasamos la matriz sin clasificar al "Merge_sort"Función, y dentro de esta función, encontramos el índice medio de la matriz dividiendo la longitud de la matriz por 2. Además, utilizamos el método "splice ()" para dividir la matriz en sub-matrices.

función merge_sort (unsortedArray)
const midle_index = unsortedArray.longitud / 2
if (unsortedarray.longitud < 2)
regresar unsortedArray

const leftArray = unsortedArray.empalme (0, midle_index)
Return MercargeRay (Merge_sort (LeftArray), Merge_sort (UnsortedArray))

Ahora, discutiremos el código para fusionar las dos matrices de división. Estas matrices de división ya están ordenadas en la función "fusion_sort", y ahora las estamos fusionando en el "fergarray" función.

Función Mergerrays (LeftArray, RightArray)
Sea ary = []
Mientras (izquierda.Longitud && RightArray.longitud)
if (LeftArray [0] < rightArray[0])
ary.Push (izquierda.cambio())
demás
ary.Push (Rightarray.cambio())


regreso [... Ary, ... LeftArray, ... RightArray]

En la función dada anterior "LeftArray" y "RightArray" están las dos matrices ordenadas y las estamos fusionando para obtener una sola matriz clasificada. Se utilizan dos métodos en este ejemplo: el "empujar()Método "para agregar el valor al final de la matriz ordenada y el"cambio()Método "para eliminar el valor que se selecciona de la subarray. Por último, la consola.El método log () se utiliza para probar la salida.

El fragmento de código completo iría así:

Función Mergerrays (LeftArray, RightArray)
Sea ary = []
Mientras (izquierda.Longitud && RightArray.longitud)
if (LeftArray [0] < rightArray[0])
ary.Push (izquierda.cambio())
demás
ary.Push (Rightarray.cambio())


regreso [... Ary, ... LeftArray, ... RightArray]

función merge_sort (unsortedArray)
const midle_index = unsortedArray.longitud / 2
if (unsortedarray.longitud < 2)
regresar unsortedArray

const leftArray = unsortedArray.empalme (0, midle_index)
Return Mergerrays (Merge_sort (LeftArray), Merge_sort (UnsortedArray))

UnsortedArray = [5, 7, 1, 4, 6, 3, 2];
consola.log (Merge_sort (UnsortedArray));

Producción:

Conclusión:

La clasificación de fusiones divide una lista en las sub-listas, y continúa dividiendo la lista hasta que una subsist obtiene un solo elemento, luego fusiona todas las sub-listas y produce una nueva lista ordenada. En esta publicación, aprendimos el concepto de clasificación de fusión, luego consideramos algunos ejemplos, y finalmente los implementamos en JavaScript. También hemos explicado cómo funciona el método del método de empalme, el método de empuje y el cambio en JavaScript.