Ambil var a = [4,2,6,3,1,9,5,7,8,0]; sebagai contoh.
1. Bukit Sort. Penyortiran Hill adalah upgrade yang dibuat pada penyortiran insert. Ini adalah beberapa metode untuk dibandingkan dengan mereka yang memiliki jarak terlebih dahulu.
fungsi 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]) untuk (i = k+celah; i <len; i = i+celah) {temp = arr [i]; tagarr.push (temp); untuk (j = i-gap; j> -1; j = j-gap) {if (arr [j]> temp) {arr [j+gap] = arr [j]; } else {break; }} arr [j+celah] = temp; } console.log (tagarr, "gap:"+gap); // output array diurutkan yang saat ini dimasukkan. console.log (arr); // output array setelah putaran penyortiran ini. } gap = parseInt (celah/2); } return arr; }Output proses:
[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] "celah: 5" [4, 2, 6, 3, 1, 9, 7, 7, 8, 0] [3, 8] "GAP: 2, 6, 1, 1, 1, 6, 8, 0] [3, 8, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, [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, 7, 7, 8, 0] [4, 2, 2, 6, 3, 3, 0, 9, 7, 7, 8, 0] [4, 2, 2, 6, 6, 6, 0, 0, 0, 0, 0] [4, 0, 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, 3, 0] [1, 0] [1] [GAP: 5 "[4, 2, 6, 3, 3, 0 [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: 2, 1, 1, 2, 2, 3, 3, 6, 7, 8, 9]" [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
Itu dapat dilihat dari output. Interval antara putaran pertama adalah 5. Urutkan array interval ini pada gilirannya.
Intervalnya adalah 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] "celah: 5" [4, 2, 6, 3, 1, 9, 7, 7, 8, 0] [3, 8] "GAP: 2, 6, 1, 1, 1, 6, 8, 0] [3, 8, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, [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, 7, 7, 8, 0] [4, 2, 2, 6, 3, 3, 0, 9, 7, 7, 8, 0] [4, 2, 2, 6, 6, 6, 0, 0, 0, 0, 0] [4, 0, 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, 3, 0] [1, 0] [1] [GAP: 5 "[4, 2, 6, 3, 3, 0 [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: 2, 1, 1, 2, 2, 3, 3, 6, 7, 8, 9]" [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,
Intervalnya adalah 2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1] 4 6 0 5 8 2 3 9 7 1
Setelah menyortir:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
Intervalnya adalah 1:
Setelah menyortir:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
2. Sortir Cepat. Buat array yang ditandai dengan nilai dalam array. Letakkan nilainya lebih kecil dari ini di sebelah kiri array, dan letakkan nilainya lebih besar dari ini di sebelah kanan array. Kemudian secara rekursif melakukan operasi yang sama di array kiri dan kanan. Sampai penyortiran selesai. Biasanya nilai pertama dari array ditandai.
Kode:
function quicksort (arr) {var len = arr.length, lefararr = [], rightArr = [], tag; if (len <2) {return arr; } tag = arr [0]; untuk (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. Pesan dan urutkan. Gabungkan serangkaian yang diurutkan menjadi urutan yang besar dan lengkap. Gabungkan dimulai dengan unit terkecil. Kemudian secara bertahap menggabungkan array yang dipesan gabungan. Akhirnya, gabungan penyortiran tercapai.
Metode untuk menggabungkan dua array yang dipesan:
Fungsi 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.ccat (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; }Gabungan Sort:
function 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 (celah); } n ++; } glen = gaparr.length; untuk (var i = 0; i <glen; i ++) {gap = gaparr [i]; untuk (var j = 0; j <len; j = j+celah*2) {arrleft = arr.slice (j, j+celah); arrright = arr.slice (j+celah, j+celah*2); console.log ("kiri:"+arrleft, "kanan:"+arrright); arr = arr.slice (0, j) .concat (subsor (arrleft, arrright), arr.slice (j+celah*2)); }} return arr; }Urutkan [4,2,6,3,1,9,5,7,8,0] Output:
Kiri: 4 Kanan: 2 Kiri: 6 Kanan: 3 Kiri: 1 Kanan: 9 Kiri: 5 Kanan: 7 Kiri: 8 Kanan: 0 Kiri: 2,4 Kanan: 3,6 Kiri: 1,9 Kanan: 5,7 Kiri: 0,8 Kanan: Kiri: 2,3,4,6 Kanan: 1,5,7,9 Kiri: 0,8 Kanan: Kiri: 1,2,4,5,6,6,6,6,7: 0,6,7: 0,6,6,6,9,7: 0,6,4: 0,6,6,9,9: 0,6,4,9,8
Dapat dilihat bahwa mulai dari unit terkecil.
Babak pertama pertama menggabungkan elemen -elemen yang berdekatan secara berurutan: 4,2; 6,3; 1,9; 5,7; 8,0
Setelah penggabungan selesai, menjadi: [2,4,3,6,1,9,5,7,0,8]
Babak kedua bergabung dalam satu unit dari 2 elemen: [ 2,4], [3,6]; [1,9], [5,7]; [0,8], [];
Setelah penggabungan selesai, menjadi: [2,3,4,6,1,5,7,9,0,8]
Babak ketiga bergabung dalam satu unit dari 4 elemen: [ 2,3,4,6], [1,5,7,9]; [0,8], []
Setelah penggabungan selesai, ia menjadi: [1,2,3,4,5,6,7,9,0,8];
Babak keempat bergabung dalam satu unit dari 8 elemen: [1,2,3,4,5,6,7,9], [0,8];
Gabungan selesai. [0,1,2,3,4,5,6,7,8,9];
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.