Взять var a = [4,2,6,3,1,9,5,7,8,0]; В качестве примера.
1. Сорт холмов. Hill Sorting - это обновление, сделанное при сортировке вставки. Это некоторые методы, чтобы сравнить с теми, у кого есть на расстоянии, сначала.
Функция 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]) для (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); // выводить вставленную вставленную отсортированную массив. console.log (arr); // выводить массив после этого раунда сортировки. } GAP = ParseInt (GAP/2); } return arr; }Вывод процесса:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [6, 7] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 7, 8, 8, 0] [3, 8]. 0] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Гэп: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Зазор: 5» [4, 2, 6, 3, 0, 9, 7, 7, 8, 0] [6, 7]. 8, 0] [1, 0] «Разрыв: 5» [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Разрыв: 5» [4, 2, 6, 3, 9, 5, 7, 8, 0] [6] [4] 9, 5, 7, 8, 0].
Это можно увидеть с вывода. Интервал между первым раундом составляет 5. Сортируйте массивы этих интервалов по очереди.
Интервал 5:
[4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [6, 7] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 7, 8, 8, 0] [3, 8]. 0] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Гэп: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Зазор: 5» [4, 2, 6, 3, 0, 9, 7, 7, 8, 0] [6, 7]. 8, 0] [1, 0] «Разрыв: 5» [4, 2, 6, 3, 0, 9, 5, 7, 8, 0] [6, 7] «Разрыв: 5» [4, 2, 6, 3, 1, 9, 5, 7, 8, 0] [1, 0] «Разрыв: 5» [4, 2, 6, 3, 9, 5, 7, 8, 0] [6] [4] 9, 5, 7, 8, 0].
Интервал 2:
[4, 2, 6, 3, 0, 9, 5, 7, 8, 1] 4 6 0 5 8 2 3 9 7 1
После сортировки:
[0, 1, 4, 2, 5, 3, 6, 7, 8, 9]
Интервал 1:
После сортировки:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
2. Быстрый сортировка. Сделайте массив, отмеченный значением в массиве. Поместите значение меньше этого слева от массива и поместите значение больше, чем это справа от массива. Затем рекурсивно выполните ту же операцию в левой и правой массивах. Пока сортировка не будет завершена. Обычно первое значение массива помечено.
Код:
функция QuickSort (arr) {var len = arr.length, leftarr = [], rightarr = [], tag; if (len <2) {return arr; } tag = arr [0]; for (i = 1; i <len; i ++) {if (arr [i] <= tag) {leathar.push (arr [i])} else {rightarr.push (arr [i]); }} return QuickSort (leftArr) .concat (Tag, QuickSort (RightArr)); }3. Закажите и сортируйте. Объедините серию отсортированных последствий в большую, полную упорядоченную последовательность. Слияние, начиная с самого маленького блока. Затем постепенно объединяют объединенные заказанные массивы. Наконец, сортировка слияния достигается.
Методы для объединения двух заказанных массивов:
Функция подборка (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; }Слияние сортировки:
функция mergesort (arr) {var len = arr.length, arrleft = [], arrright = [], gap = 1, maxgap = len-1, daparr = [], 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+dap); arrrirt = arr.slice (J+Gap, J+Gap*2); console.log ("слева:"+arrleft, "справа:"+arrright); arr = arr.slice (0, j) .concat (подборка (arrleft, arrright), arr.slice (j+gap*2)); }} return arr; }Сортировка [4,2,6,3,1,9,5,7,8,0] Выход:
Слева: 4 справа: 2 слева: 6 справа: 3 слева: 1 справа: 9 слева: 5 справа: 7 слева: 8 справа: 0 слева: 2,4 Права: 3,6 Слева: 1,9 Права: 5,7 Слева: 0,8 Права: слева: 2,3,4,6 Права: 1,5,7,9 Слева: 0,8 Правый
Видно, что начиная с самого маленького блока.
Первый раунд сначала объединяет соседние элементы в последовательности: 4,2; 6,3; 1,9; 5,7; 8,0
После того, как слияние завершено, он становится: [2,4,3,6,1,9,5,7,0,8]]
Второй раунд объединяется в одной единице из 2 элементов: [ 2,4], [3,6]; [1,9], [5,7]; [0,8], [];
После того, как слияние завершено, он становится: [2,3,4,6,1,5,7,9,0,8]]
Третий раунд объединяется в одной единице из 4 элементов: [ 2,3,4,6], [1,5,7,9]; [0,8], []
После завершения слияния он становится: [1,2,3,4,5,6,7,9,0,0,8];
Четвертый раунд объединяется в одной единице из 8 элементов: [1,2,3,4,5,6,7,9,9], [0,8];
Слияние завершено. [0,1,2,3,4,5,6,7,8,9];
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.