Tome var a = [4,2,6,3,1,9,5,7,8,0]; como exemplo.
1. Corrente da colina. A classificação de colinas é uma atualização feita na classificação de inserção. São alguns métodos para comparar com aqueles com aqueles com uma distância primeiro.
função 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 = []; Tagar.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); // Saia a matriz classificada atualmente inserida. console.log (arr); // Saia a matriz após esta rodada de classificação. } gap = parseint (gap/2); } retornar arr; }Saída do processo:
[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, 8, 0] [6, 7] "Gap: 5" [4, 2, 6, 3, 3, 9, 5, 7, 8, 0] [1] "Gap: 5" [4, 9, 3, 7, 8, 8, 0] [1]] [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, 6, 7, 8, 9]
Pode ser visto na saída. O intervalo entre a primeira rodada é 5. Classifique as matrizes desses intervalos por sua vez.
O intervalo é 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, 8, 0] [6, 7] "Gap: 5" [4, 2, 6, 3, 3, 9, 5, 7, 8, 0] [1] "Gap: 5" [4, 9, 3, 7, 8, 8, 0] [1]] [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, 6, 7, 8, 9]
O intervalo é 2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1] 4 6 0 5 8 2 3 9 7 1
Depois de classificar:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
O intervalo é 1:
Depois de classificar:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
2. Classificação rápida. Faça uma matriz marcada com um valor na matriz. Coloque o valor menor do que isso à esquerda da matriz e coloque o valor maior que o à direita da matriz. Em seguida, execute recursivamente a mesma operação nas matrizes esquerda e direita. Até a classificação estar completa. Geralmente, o primeiro valor da matriz é marcado.
Código:
função quicksort (arr) {var len = arr.length, le lefersarr = [], rightarr = [], tag; if (len <2) {return arr; } tag = arr [0]; for (i = 1; i <len; i ++) {if (arr [i] <= tag) {leftArr.push (arr [i])} else {rightr.push (arr [i]); }} Retorne QuickSort (LefTARR) .CONCAT (TAG, Quicksort (Rightarr)); }3. Ordem e classifique. Mesclar uma série de subsequências classificadas em uma sequência grande e ordenada completa. Mesclar a partida com a menor unidade. Em seguida, fundem gradualmente as matrizes ordenadas mescladas. Finalmente, a classificação de mesclagem é alcançada.
Métodos para mesclar duas matrizes ordenadas:
função subsorto (arr1, arr2) {var len1 = arr1.length, len2 = arr2.Length, i = 0, j = 0, arr3 = [], barr1 = arr1.slice (), barl2 = arr2.slice (); while (barr1.length! = 0 || barr2.Length! = 0) {if (barr1.length == 0) {arr3 = arr3.Concat (barl2); 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.shift (); } else {arr3.push (barl2 [0]); barr2.shift (); }} retornar ARR3; }Mesclar tipo:
função mesck (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; for (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 ("Esquerda:"+Arrleft ", à direita:"+Arrright); arr = arr.slice (0, j) .CONCAT (SubsTort (Arrleft, Arrright), Arr.slice (J+Gap*2)); }} retornar arr; }Classificar [4,2,6,3,1,9,5,7,8,0] Produto:
Esquerda: 4 direita: 2 Esquerda: 6 direita: 3 Esquerda: 1 direita: 9 Esquerda: 5 direita: 7 esquerda: 8 direita: 0 esquerda: 2,4 direita: 3,6 Esquerda: 1,9 direita: 5,7 Esquerda: 0,8 direita: esquerda: 2,3,4,6, direita: 1,5,7,9 Esquerda: 0,8
Pode -se observar que a partir da menor unidade.
A primeira rodada primeiro funde os elementos adjacentes na sequência: 4,2; 6,3; 1,9; 5,7; 8,0
Após a conclusão da mesclagem, torna -se: [2,4,3,6,1,9,5,7,0,8]
A segunda rodada se funde em uma unidade de 2 elementos: [ 2,4], [3,6]; [1,9], [5,7]; [0,8], [];
Após a conclusão da mesclagem, torna -se: [2,3,4,6,1,5,7,9,0,8]
A terceira rodada se funde em uma unidade de 4 elementos: [ 2,3,4,6], [1,5,7,9]; [0,8], []
Após a conclusão da mesclagem, torna -se: [1,2,3,4,5,6,7,9,0,8];
A quarta rodada se funde em uma unidade de 8 elementos: [1,2,3,4,5,6,7,9], [0,8];
A mesclagem está concluída. [0,1,2,3,4,5,6,7,8,9];
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.