
42. Вставка с убывающим шагом.
Рассматриваются пары с шагом h/2, если элем не упорядочены, то меняем их местами.
Рассматриваются группы с шагом h/4, выполняем сортировку в группах,уменьшаем шаг и т.д. Проходим по всему массиву.
Простая вставка n2/4 – вычислительная сложность. Вычислительная сложность O(n(logn)2)
Пример: Для примера возьмем 16 элементов [1..16]. Сначала просматриваются пары с шагом 8. Это пары элементов 1-9, 2-10, 3-11, 4-12, 5-13, 6-14, 7-15, 8-16. Если значения элементов в паре не упорядочены по возрастанию, то элементы меняются местами. Назовем этот этап 8-сортировкой. Следующий этап - 4- сортировка, на котором элементы в файле делятся на четверки: 1-5-9-13, 2-6-10-14, 3-7-11-15,4-8-12-16. Выполняется сортировка в каждой четверке. Сортировка может выполняться методом простых вставок (п.1).
Следующий этап - 2-сортировка, когда элементы в файле делятся на 2 группы по 8:
1-3-5-7-9-11-13-15 и 2-4-6-8-10-12-14-16. Выполняется сортировка в каждой восьмерке. Наконец весь файл упорядочивается методом простых вставок.
ShellSort(x, n, hs, s)
1.For i: = s downto 1 do
2.H:=hs
3.For j:=h+1 to n do begin
4.Y:=x[j]
5.k:=j-h
6.while (k>=1) and (y<x[k]) do begin
7.x[k+h]:=x[k]
8.k:=k-h
9.end
10.x[k+h]:=y
11.end;
12.end;