Вставка сортировки эффективна при работе на почти отсортированных данных, то есть эффективность линейной сортировки может быть достигнута.
Но сортировка вставки, как правило, неэффективна, потому что сортировка вставки может перемещать данные только по одному за один раз.
Hill Sorting назван в честь его дизайнера Дональда Шелл, алгоритма, опубликованного в 1959 году. Некоторые старые учебники и справочные руководства под названием «Алгоритм Shell-Metzner», в котором содержится имя Марлен Метцнер Нортон, но, по словам самого Метцнера: «Я ничего не сделал для этого алгоритма, мое имя не должно появляться в алгоритме.
Основная идея сортировки холма: сначала возьмите целое число D1 меньше N в качестве первого приращения, и разделите все записи файла на группы D1. Все записи с несколькими расстояниями D1 помещаются в одну и ту же группу. Сначала выполните прямую сортировку вставки в каждой группе; Записи размещаются в одной и той же группе и отсортируются напрямую.
Этот метод по сути является методом вставки группировки.
Пример 1:
Кода -копия выглядит следующим образом:
/**
* Сортировка холмов, также известная как алгоритм снижения инкрементной сортировки, является более эффективной и улучшенной версией сортировки вставки. Сортировка холма-это нестабильный алгоритм сортировки.
*
* Hill Sorting предлагает улучшенный метод, основанный на следующих двух свойствах сортировки вставки:
*
* Вставка сортировки эффективна при работе с почти отсортированными данными, что означает, что эффективность линейной сортировки может быть достигнута.
* Но сортировка вставки, как правило, неэффективна, поскольку сортировка вставки может перемещать данные только по одному за раз.
*
*/
функция ShellSort (список) {
var Gap = math.floor (list.length / 2);
while (Gap> 0) {
for (i = GAP; i <list.length; i ++) {
temp = list [i];
for (j = i; j> = Gap && list [j - Gap]> Temp; j - = GAP) {
Список [j] = список [j - GAP];
}
список [j] = temp;
}
GAP = MATH.FLOOR (GAP / 2);
}
вернуть список;
};
// тест
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
ShellSort (Arr);
Пример 2:
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
//document.write("------------------------------------------------ ------------------------------------------------------ ------------------------- n к силе 1.3 -------- »);
//document.write("<br /> <br /> ")
// var array = новый массив (12, 25, 32, 16, 18, 27, 59, 69, 36);
функция ShellSort (массив) {
var j, i, v, h = 1, s = 3, k, n = array.length;
var result = "";
var count = 0;
в то время как (h <n)
H = S*H+1;
while (h> 1) {
H = (H-1)/s;
для (k = 0; k <h; k ++)
for (i = k+h, j = i; i <n; i+= h, j = i) {
v = массив [i];
Пока (правда)
if ((j- = h)> = 0 && array [j]> v)
массив [j+h] = массив [j];
еще
перерыв;
массив [j+h] = v;
}
count ++;
result + = "<br /> Think" + count + "Результат упорядочения через проход:";
for (var n = 0; n <array.length; n ++) {
Результат + = массив [n] + ",";
}
}
результат возврата;
}
// должен (массив);
//document.write("<br /> <br /> ");
</script>