Nehmen wir var a = [4,2,6,3,1,9,5,7,8,0]; als Beispiel.
1. Hill Sort. Die Sortierung von Hills ist ein Upgrade, das beim Sortieren des Einsatzs vorgenommen wurde. Es sind einige Methoden, um mit denen mit denen zuerst zu vergleichen.
Funktion ShellSort (arr) {var i, k, j, len = arr.length, gap = math.ceil (len/2), temp; while (gap> 0) {für (var k = 0; k <gap; k ++) {var tagarr = []; Tagarr.push (arr [k]) für (i = k+gap; i <len; i = i+gap) {temp = arr [i]; tagarr.push (temp); für (j = igap; 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); // Ausgabe des aktuell eingefügten Sortiertenarrays. console.log (arr); // Ausgabe des Arrays nach dieser Sortierrunde. } gap = parseInt (gap/2); } return arr; }Prozessausgabe:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0]. 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]. 9, 5, 7, 8, 0] [1, 0] "Lücke: 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, 7, 7, 7, 7, 9, 9, 9]
Es ist aus der Ausgabe zu sehen. Das Intervall zwischen der ersten Runde beträgt 5. Sortieren Sie die Arrays dieser Intervalle nacheinander.
Das Intervall ist 5:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0]. 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]. 9, 5, 7, 8, 0] [1, 0] "Lücke: 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, 7, 7, 7, 7, 9, 9, 9]
Das Intervall ist 2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1] 4 6 0 5 8 2 3 9 7 1
Nach dem Sortieren:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
Das Intervall ist 1:
Nach dem Sortieren:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
2. Schnelle Sortierung. Machen Sie ein Array mit einem Wert im Array. Setzen Sie den Wert kleiner als diesen links vom Array und setzen Sie den Wert größer als diesen rechts vom Array. Führen Sie dann rekursiv den gleichen Betrieb auf den linken und rechten Arrays durch. Bis die Sortierung abgeschlossen ist. Normalerweise ist der erste Wert des Arrays gekennzeichnet.
Code:
Funktion QuickSort (arr) {var len = arr.length, Leftarr = [], rightarr = [], Tag; if (len <2) {return arr; } Tag = arr [0]; für (i = 1; i <len; i ++) {if (arr [i] <= tag) {Leftarr.push (arr [i])} else {Rightarr.push (arr [i]); }} return QuickSort (Leftarr) .Concat (Tag, QuickSort (Rightarr)); }3.. Bestell und sortieren. Fusionieren Sie eine Reihe sortierter Untersequenzen in eine große, vollständige geordnete Sequenz. Zusammenführen mit der kleinsten Einheit. Dann schrittweise die zusammengefügten Arrays zusammenführen. Schließlich wird die Zusammenführung der Sortierung erreicht.
Methoden zur Zusammenführung von zwei bestellten Arrays:
Funktion 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! 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 (Barr2 [0]); Barr2.Shift (); }} return arr3; }Sortierung zusammenführen:
Funktion 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; für (var i = 0; i <Glen; i ++) {gap = gaparr [i]; für (var j = 0; j <len; j = j+gap*2) {arrleft = arr.lice (j, j+gap); arrright = arr.slice (j+gap, j+gap*2); console.log ("links:"+arrleft, rechts: "+arrright); arr = arr.lice (0, j) .Concat (subSort (arrleft, arrright), arr.lice (j+gap*2)); }} return arr; }Sortieren [4,2,6,3,1,9,5,7,8,0] Output:
links: 4 rechts: 2 links: 6 rechts: 3 links: 1 rechts: 9 links: 5 rechts: 7 links: 8 rechts: 0 links: 2,4 rechts: 3,6 links: 1,9 rechts: 5,7 links: 0,8 rechts: links: 2,3,4,6 rechts: 1,5,7,7 rechts: 0,8 rechts: 1,2,3,4,5,7,7,7,7,9: 0,8 recht
Es ist zu erkennen, dass aus der kleinsten Einheit.
Die erste Runde fügt die ersten angrenzenden Elemente in Sequenz zusammen: 4,2; 6,3; 1,9; 5,7; 8,0
Nach Abschluss der Zusammenführung wird es: [2,4,3,6,1,9,5,7,0,8]
Die zweite Runde verschmilzt in einer Einheit von 2 Elementen: [ 2,4], [3,6]; [1,9], [5,7]; [0,8], [];
Nach Abschluss der Zusammenführung wird es: [2,3,4,6,1,5,7,9,0,8]
Die dritte Runde verschmilzt in einer Einheit von 4 Elementen: [ 2,3,4,6] [1,5,7,9]; [0,8], []
Nach Abschluss der Zusammenführung wird es: [1,2,3,4,5,6,7,9,0,8];
Die vierte Runde verschmilzt in einer Einheit von 8 Elementen: [1,2,3,4,5,6,7,9], [0,8];
Zusammenführung ist abgeschlossen. [0,1,2,3,4,5,6,7,8,9];
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.