Метод дает хороший эффект либо в случае малого числа элементов сортируемой последовательности, либо в случае небольшого числа пересылок, выполняемых при сортировке. Эти особенности были использованы Д. Л. Шеллом для разработки усовершенствованного алгоритма вставок, который получил название алгоритма Шелла.
Алгоритм состоит в том, что исходная последовательность разделяется на ряд групп, каждая из которых упорядочивается методом простой вставки. В процессе упорядочивания размеры групп возрастают до тех пор, пока все элементы не войдут в упорядоченную группу. Группой называется подмножество элементов последовательности, номера которых образуют арифметическую прогрессию с разностью d (d называется шагом группы).
В начале процесса упорядочения выбирается шаг группы d1, зависящий от n. Затем определяются группы, элементы которых имеют номера i; i+d1; i+2d1; …; i+kid1 при i=1, 2, … ,d1; где ki – наибольшее число, удовлетворяющее неравенству i+ kid1 ≤ n, и производится сортировка методом простых вставок в каждой из групп. Затем выбирается шаг d2сортируется методом вставки целиком. Под этапом сортировки понимается процесс, в котором упорядочиваются все группы с шагом d.
Размер шага рекомендуется выбирать по соотношению:
d1 = [n/2]; dj = [dj-1/2]
где j = 1, 2, … -номер этапа сортировки.
Пример. Пусть дана последовательность элементов X={6, 1, 3, 4, 2, 8, 7, 5, 0}, которую следует упорядочить методом Шелла.
На первом этапе выбирается шаг d1 = [9/2]=4 и образуются следующие четыре группы: {6, 2, 0}, {1, 8}, {3, 7}, {4, 5}.
После сортировки в каждой из групп получится последовательность:
{0, 1, 3, 4, 2, 8, 7, 5, 6}.
На втором этапе шаг сортировки d2 = d1/2 = 2 и образуются две группы: {0, 3, 2, 7, 6}, {1, 4, 8, 5}. После упорядочения этих групп получается последовательность {0, 1, 2, 4, 3, 5, 6, 8, 7}.
На третьем этапе шаг d3 = d2/2 = 1 и полученная на 2-ом этапе последовательность сортируется целиком методом простой вставки. Результатом является последовательность {0, 1, 2, 3, 4, 5, 6, 7, 8}. Исходная последовательность упорядочивалась по частям с поэтапным объединением групп, поэтому общее количество сравнений значительно меньше, чем для метода простой вставки. В этом смысл модификации алгоритма вставки, предложенной Шеллом.
Анализ этого метода достаточно сложен и приводит к серьезным математическим задачам, многие из которых не решены до настоящего времени. Существует следующая оценка числа операций сравнения
C ≤ 0,5n^(3/2)
|