Prendre var a = [4,2,6,3,1,9,5,7,8,0]; par exemple.
1. Toi de colline. Le tri des collines est une mise à niveau effectuée sur le tri des insert. Il s'agit de quelques méthodes à comparer avec celles avec une distance en premier.
fonction 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]) pour (i = k + gap; i <len; i = i + gap) {temp = arr [i]; Tagarr.push (temp); pour (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); // Sortie le tableau trié actuellement inséré. Console.log (arr); // Sortie le tableau après ce tour de tri. } gap = parseInt (GAP / 2); } return arr; }Sortie de processus:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "Écart: 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] ". 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] "Écart: 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, 5, 6, 7, 8, 9]
Il peut être vu à partir de la sortie. L'intervalle entre le premier tour est 5. Trier les tableaux de ces intervalles à leur tour.
L'intervalle est de 5:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] "Écart: 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] ". 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] "Écart: 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, 5, 6, 7, 8, 9]
L'intervalle est de 2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1] 4 6 0 5 8 2 3 9 7 1
Après le tri:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
L'intervalle est 1:
Après le tri:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
2. Sort rapide. Faites un tableau marqué d'une valeur dans le tableau. Mettez la valeur plus petite que celle-ci à gauche du tableau et placez la valeur supérieure à celle-ci à droite du tableau. Effectuez ensuite de manière récursive la même opération sur les tableaux gauche et droit. Jusqu'à ce que le tri soit terminé. Habituellement, la première valeur du tableau est marquée.
Code:
fonction Quicksort (arr) {var len = arr.length, Leftarr = [], droiter = [], tag; if (len <2) {return arr; } tag = 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 (tag, Quicksort (droiter)); }3. Commandez et tri. Fusionnez une série de sous-séquences triées dans une grande séquence ordonnée complète. Fusionner en commençant par la plus petite unité. Fusionnez ensuite progressivement les tableaux ordonnés fusionnés. Enfin, le tri de fusion est réalisé.
Méthodes pour fusionner deux tableaux ordonnés:
SUBSORT FONCTION (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.shift (); } else {arr3.push (Barr2 [0]); Barr2.Shift (); }} return arr3; }Tour de fusion:
fonction 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; pour (var i = 0; i <glen; i ++) {gap = gaparr [i]; pour (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 ("gauche:" + arrleft, "droite:" + arrright); arr = arr }} return arr; }Trier [4,2,6,3,1,9,5,7,8,0] Sortie:
Gauche: 4 droite: 2 à gauche: 6 droite: 3 gauche: 1 à droite: 9 à gauche: 5 Droite: 7 Gauche: 8 Droite: 0 À gauche: 2,4 Droite: 3,6 gauche: 1,9 Droite: 5,7 gauche: 0,8 Droite: Gauche: 2,3,4,6 Droite: 1,5,7,9 À gauche: 0,8 Droite: gauche: 1,2,4,5,6,7,7 Droite: 0,8
On peut voir qu'à partir de la plus petite unité.
Le premier tour fusionne les éléments adjacents en séquence: 4,2; 6,3; 1,9; 5,7; 8,0
Une fois la fusion terminée, elle devient: [2,4,3,6,1,9,5,7,0,8]
Le deuxième tour se fusionne dans une unité de 2 éléments: [ 2,4], [3,6]; [1,9], [5,7]; [0,8], [];
Une fois la fusion terminée, elle devient: [2,3,4,6,1,5,7,9,0,8]
Le troisième tour se fusionne dans une unité de 4 éléments: [ 2,3,4,6], [1,5,7,9]; [0,8], []
Une fois la fusion terminée, elle devient: [1,2,3,4,5,6,7,9,0,8];
Le quatrième tour se fusionne dans une unité de 8 éléments: [1,2,3,4,5,6,7,9], [0,8];
La fusion est terminée. [0,1,2,3,4,5,6,7,8,9];
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.