Tomar var a = [4,2,6,3,1,9,5,7,8,0]; Como ejemplo.
1. Hill Sort. La clasificación de la colina es una actualización realizada en la clasificación de inserción. Son algunos métodos para comparar con aquellos con aquellos con una distancia primero.
function shellSort (arr) {var i, k, j, len = arr.length, gap = math.ceil (len/2), temp; while (gap> 0) {for (var k = 0; k <gap; k ++) {var tagarr = []; TAGARR.PUSH (arr [k]) para (i = k+gap; i <len; i = i+gap) {temp = arr [i]; TAGARR.PUSH (TEMP); for (j = i-gap; j> -1; j = j-gap) {if (arr [j]> temp) {arr [j+gap] = arr [j]; } else {break; }} arr [j+gap] = temp; } console.log (Tagarr, "Gap:"+Gap); // Salida de la matriz ordenada insertada actualmente. console.log (arr); // emite la matriz después de esta ronda de clasificación. } gap = parseInt (gap/2); } return arr; }Salida del proceso:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [3, 8] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "Gap: 5" [4, 2, 3, 5, 9, 6, 7, 8, 1] [2, 3, 9, 7, 1] "Gap: 2" [0, 1, 4, 2, 5, 3, 6, 7, 8, 9] "Gap: 1" [0, 1, 2, 3, 4, 5, 7, 8, 9]]
Se puede ver desde la salida. El intervalo entre la primera ronda es 5. Ordene las matrices de estos intervalos a su vez.
El intervalo es 5:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [3, 8] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "gap:5" [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] "gap:5" [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "Gap: 5" [4, 2, 3, 5, 9, 6, 7, 8, 1] [2, 3, 9, 7, 1] "Gap: 2" [0, 1, 4, 2, 5, 3, 6, 7, 8, 9] "Gap: 1" [0, 1, 2, 3, 4, 5, 7, 8, 9]]
El intervalo es 2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1] 4 6 0 5 8 2 3 9 7 1
Después de clasificar:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
El intervalo es 1:
Después de clasificar:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
2. Sorteo rápido. Haga una matriz marcada con un valor en la matriz. Coloque el valor más pequeño que este a la izquierda de la matriz y coloque el valor más grande que este a la derecha de la matriz. Luego realice recursivamente la misma operación en las matrices izquierda y derecha. Hasta que se complete la clasificación. Por lo general, el primer valor de la matriz está marcado.
Código:
function Quicksort (arr) {var len = arr.length, leftarr = [], rightarr = [], tag; if (len <2) {return arr; } etiqueta = arr [0]; for (i = 1; i <len; i ++) {if (arr [i] <= tag) {leftarr.push (arr [i])} else {rightarr.push (arr [i]); }} return Quicksort (Leftarr) .concat (etiqueta, Quicksort (Rightarr)); }3. Ordenar y clasificar. Fusionar una serie de subsecuencias ordenadas en una secuencia grande y ordenada completa. Fusionar comenzando con la unidad más pequeña. Luego fusione gradualmente las matrices ordenadas fusionadas. Finalmente, se logra la clasificación de fusión.
Métodos para fusionar dos matrices ordenadas:
Función subsort (arr1, arr2) {var len1 = arr1.length, len2 = arr2.length, i = 0, j = 0, arr3 = [], Barr1 = arr1.slice (), Barr2 = arr2.slice (); while (Barr1.length! = 0 || Barr2.Length! = 0) {if (Barr1.length == 0) {arr3 = arr3.concat (Barr2); Barr2.Length = 0; } else if (Barr2.Length == 0) {arr3 = arr3.concat (Barr2); Barr2.Length = 0; } else if (Barr2.Length == 0) {arr3 = arr3.concat (Barr1); Barr1.length = 0; } else {if (Barr1 [0] <= Barr2 [0]) {arr3.push (Barr1 [0]); Barr1.hift (); } else {arr3.push (Barr2 [0]); Barr2.Shift (); }} return arr3; }Sorteo de fusiones:
función mergeSort (arr) {var len = arr.length, arrleft = [], arrright = [], gap = 1, maxgap = len-1, gaparr = [], glen, n; while (gap <maxgap) {gap = math.pow (2, n); if (gap <= maxgap) {gaparr.push (gap); } n ++; } glen = gaparr.length; para (var i = 0; i <glen; i ++) {gap = gaparr [i]; for (var j = 0; j <len; j = j+gap*2) {arrleft = arr.slice (j, j+gap); Arrright = arr.slice (j+gap, j+gap*2); console.log ("izquierda:"+arrleft, "derecha:"+arrright); arr = arr.slice (0, j) .concat (subsort (arrleft, arrright), arr.slice (j+gap*2)); }} return arr; }Ordena [4,2,6,3,1,9,5,7,8,0] salida:
Izquierda: 4 Derecha: 2 Izquierda: 6 derecha: 3 Izquierda: 1 derecha: 9 Izquierda: 5 Derecha: 7 Izquierda: 8 Derecha: 0 Izquierda: 2,4 Derecha: 3,6 Izquierda: 1,9 Derecha: 5,7 Izquierda: 0,8 Derecha: Izquierda: 2,3,4,6 Derecha: 1,5,7,9: 0,8 Izquierda a la derecha: Izquierda: 1,2,3,4,5,6,7,9 Right: 0,8
Se puede ver que comenzando desde la unidad más pequeña.
La primera ronda fusiona la primera vez en la secuencia: 4,2; 6,3; 1,9; 5,7; 8,0
Después de completar la fusión, se convierte en: [2,4,3,6,1,9,5,7,0,8]
La segunda ronda se fusiona en una unidad de 2 elementos: [ 2,4], [3,6]; [1,9], [5,7]; [0,8], [];
Después de completar la fusión, se convierte en: [2,3,4,6,1,5,7,9,0,8]
La tercera ronda se fusiona en una unidad de 4 elementos: [ 2,3,4,6], [1,5,7,9]; [0,8], []
Después de completar la fusión, se convierte en: [1,2,3,4,5,6,7,9,0,8];
La cuarta ronda se fusiona en una unidad de 8 elementos: [1,2,3,4,5,6,7,9], [0,8];
Se completa la fusión. [0,1,2,3,4,5,6,7,8,9];
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.