Шеллсорт
Сорт | Алгоритм сортировки |
---|---|
Структура данных | Множество |
Худшая производительность | На 2 ) (наихудшая известная последовательность разрывов в худшем случае) ( нлог О 2 n ) (наилучшая известная последовательность пробелов в худшем случае) [1] |
Лучшая производительность | O( n log n ) (большинство последовательностей с пробелами) ( нлог О 2 n ) (наиболее известная последовательность пробелов для наихудшего случая) [2] |
Средняя производительность | зависит от последовательности пробелов |
Наихудшая пространственная сложность | О( n ) всего, O(1) вспомогательного |
Оптимальный | Нет |
Сортировка Шелла , также известная как сортировка Шелла или метод Шелла , представляет собой на месте сортировку сравнения . Ее можно рассматривать либо как обобщение сортировки обменом ( пузырьковая сортировка ), либо сортировку вставкой ( сортировка вставками ). [3] Метод начинается с сортировки пар элементов, находящихся далеко друг от друга, а затем постепенно сокращается разрыв между сравниваемыми элементами. Начав с удаленных друг от друга элементов, он может переместить некоторые неуместные элементы в нужное положение быстрее, чем простой обмен ближайшими соседями. Дональд Шелл опубликовал первую версию такого рода в 1959 году. [4] [5] Время работы Shellsort во многом зависит от используемой последовательности пропусков. Для многих практических вариантов определение их временной сложности остается открытой проблемой .
Описание
[ редактировать ]Сортировка Шелл — это оптимизация сортировки вставками , позволяющая обмениваться элементами, находящимися далеко друг от друга. Идея состоит в том, чтобы упорядочить список элементов так, чтобы, начиная с любого места, при взятии каждого h -го элемента получался отсортированный список. Такой список называется h -сортированным. Его также можно рассматривать как h чередующихся списков, каждый из которых отсортирован индивидуально. [6] Начиная с больших значений h, элементы могут перемещаться на большие расстояния в исходном списке, быстро уменьшая большой беспорядок и оставляя меньше работы для h -сортировки. выполнения меньших шагов [7] Если затем список отсортирован по k для некоторого меньшего целого числа k , то список останется отсортированным по h . Окончательная сортировка с h = 1 гарантирует, что список будет полностью отсортирован в конце. [6] но разумно выбранная убывающая последовательность значений h оставляет очень мало работы для этого последнего прохода.
Проще говоря, это означает, что если у нас есть массив из 1024 чисел, наш первый пробел ( h ) может быть 512. Затем мы просматриваем список, сравнивая каждый элемент в первой половине с элементом во второй половине. Наш второй пробел ( k ) равен 256, что разбивает массив на четыре секции (начиная с 0, 256, 512, 768), и мы проверяем, что первые элементы в каждой секции отсортированы относительно друг друга, а затем второй элемент в каждый раздел и так далее. На практике последовательность пробелов может быть любой, но последний пробел всегда равен 1, чтобы завершить сортировку (фактически завершая обычную сортировку вставками).
Ниже показан пример выполнения Shellsort с пробелами 5, 3 и 1.
1 | aа2 | aа3 | a 4 | aа5 | 6 | a 7 | й 8- | aа9 | 10 | в 11 | 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Входные данные | 62 | 83 | 18 | 53 | 07 | 17 | 95 | 86 | 47 | 69 | 25 | 28 |
После 5-сортировки | 17 | 28 | 18 | 47 | 07 | 25 | 83 | 86 | 53 | 69 | 62 | 95 |
После 3-сортировки | 17 | 07 | 18 | 47 | 28 | 25 | 69 | 62 | 53 | 83 | 86 | 95 |
После 1-сортировки | 07 | 17 | 18 | 25 | 28 | 47 | 53 | 62 | 69 | 83 | 86 | 95 |
Первый проход, 5-сортировка, выполняет сортировку вставкой в пяти отдельных подмассивах ( a 1 , a 6 , a 11 ), ( a 2 , a 7 , a 12 ), ( a 3 , a 8 ), ( a 4 , a 9 , ( 5 10 , ) ) . Например, он меняет подмассив ( a 1 , a 6 , a 11 ) с (62, 17, 25) на (17, 25, 62). Следующий проход, 3-сортировка, выполняет сортировку вставкой для трех подмассивов ( a 1 , a 4 , a 7 , a 10 ), ( a 2 , a 5 , a 8 , a 11 ), ( a 3 , a 6 , 9 , 12 ) . Последний проход, сортировка по 1, представляет собой обычную сортировку вставкой всего массива ( a 1 ,..., a 12 ).
Как показано в примере, подмассивы, над которыми работает Shellsort, изначально короткие; позже они длиннее, но почти заказаны. В обоих случаях сортировка вставками работает эффективно.
В отличие от сортировки вставками , сортировка Шелл не является стабильной сортировкой , поскольку вставки с пробелами перемещают одинаковые элементы друг за другом и, таким образом, теряют свой первоначальный порядок. Это адаптивный алгоритм сортировки , поскольку он выполняется быстрее, если входные данные отсортированы частично.
Псевдокод
[ редактировать ]Использование последовательности пробелов Марцина Чиуры с внутренней сортировкой вставками.
# Sort an array a[0...n-1].
gaps = [701, 301, 132, 57, 23, 10, 4, 1] # Ciura gap sequence
# Start with the largest gap and work down to a gap of 1
# similar to insertion sort but instead of 1, gap is being used in each step
foreach (gap in gaps)
{
# Do a gapped insertion sort for every elements in gaps
# Each loop leaves a[0..gap-1] in gapped order
for (i = gap; i < n; i += 1)
{
# save a[i] in temp and make a hole at position i
temp = a[i]
# shift earlier gap-sorted elements up until the correct location for a[i] is found
for (j = i; (j >= gap) && (a[j - gap] > temp); j -= gap)
{
a[j] = a[j - gap]
}
# put temp (the original a[i]) in its correct location
a[j] = temp
}
}
Последовательности разрывов
[ редактировать ]Вопрос о том, какую последовательность пробелов использовать, сложен. Каждая последовательность пробелов, содержащая 1, дает правильную сортировку (поскольку последний проход становится обычной сортировкой вставкой); однако свойства полученных таким образом версий Шеллсорта могут сильно различаться. Слишком малое количество пробелов замедляет передачу, а слишком большое количество пробелов приводит к накладным расходам.
В таблице ниже сравниваются большинство предложенных последовательностей пробелов, опубликованных на данный момент. Некоторые из них имеют уменьшающиеся элементы, которые зависят от размера отсортированного массива ( N ). Другие представляют собой возрастающие бесконечные последовательности, элементы которых меньше N следует использовать в обратном порядке.
ОЭИС | Общий термин ( k ≥ 1) | Бетонные зазоры | В худшем случае временная сложность |
Автор и год издания |
---|---|---|---|---|
[например, когда N = 2 п ] | Шелл , 1959 год. [4] | |||
Фрэнк и Лазарус, 1960 г. [8] | ||||
А000225 | Хиббард , 1963 год. [9] | |||
А083318 | , с префиксом 1 | Папернов и Стасевич, 1965 г. [10] | ||
А003586 | Последовательные номера формы ( 3-гладкие числа) | Пратт , 1971 год. [1] | ||
А003462 | , не более | Кнут , 1973 г., [3] по мотивам Пратта , 1971 г. [1] | ||
А036569 | Инчерпи и Седжвик , 1985 г., [11] Кнут [3] | |||
А036562 | , с префиксом 1 | Седжвик, 1982 год. [6] | ||
А033622 | Седжвик, 1986 год. [12] | |||
Unknown | Гоннет и Баеза-Йейтс , 1991 г. [13] | |||
А108870 | (или, что то же самое, ) | Unknown | Токуда, 1992 г. [14] (ошибочная цитата согласно OEIS) | |
А102549 | Неизвестно (получено экспериментально) | Unknown | Чура, 2001 г. [15] | |
А366726 | Unknown | Ли, 2021 г. [16] | ||
Unknown | Скин, Эренборг, Яромчик, 2023 г. [17] |
Когда двоичное представление N содержит много последовательных нулей, сортировка Шелла с использованием исходной последовательности пробелов Шелла делает Θ( N 2 ) сравнения в худшем случае. Например, этот случай имеет место при N, равном степени двойки, когда элементы, большие и меньшие, чем медиана, занимают нечетные и четные позиции соответственно, поскольку они сравниваются только на последнем проходе.
Хотя она имеет более высокую сложность, чем O ( N log N ), которая оптимальна для сортировок сравнения, версия Пратта пригодна для сортировочных сетей Бэтчера и имеет ту же асимптотическую сложность вентиля, что и битонный сортировщик .
Гонне и Баеза-Йейтс заметили, что сортировка Шелл в среднем проводит наименьшее количество сравнений, когда соотношение последовательных пробелов примерно равно 2,2. [13] Вот почему их последовательность с соотношением 2,2 и последовательность Токуды с соотношением 2,25 оказываются эффективными. Однако неизвестно, почему это так. Седжвик рекомендует использовать пробелы, которые имеют низкие наибольшие общие делители или попарно взаимно просты . [18] [ не удалось пройти проверку ] Пробелы с нечетными номерами, похоже, хорошо работают на практике: наблюдалось сокращение на 25% за счет исключения пробелов с четными номерами. Разрывы, которые позволяют избежать кратных 3 и 5, по-видимому, дают небольшую выгоду <10%. [ оригинальное исследование? ]
Что касается среднего числа сравнений, последовательность Чиуры [15] имеет самые известные характеристики; пропуски больше 701 не определялись, но последовательность можно расширить по рекурсивной формуле .
Последовательность Токуды, определяемая простой формулой , где , , можно рекомендовать для практического применения.
Если максимальный размер входных данных невелик, что может произойти, если сортировка Шелла используется на небольших подмассивах другим алгоритмом рекурсивной сортировки, таким как быстрая сортировка или сортировка слиянием , тогда можно свести в таблицу оптимальную последовательность для каждого размера входных данных. [19] [20]
Вычислительная сложность
[ редактировать ]Имеет место следующее свойство: после h 2 -сортировки любого массива, отсортированного по h 1 , массив остается h 1 -отсортированным. [21] Каждый массив с h 1 -sorted и h 2 -sorted также ( a 1 h 1 + a 2 h 2 )-отсортирован для любых неотрицательных целых чисел a 1 и a 2 . Таким образом, наихудшая сложность сортировки Шелла связана с проблемой Фробениуса : для заданных целых чисел h 1 ,..., h n с gcd = 1 число Фробениуса g ( h 1 ,..., h n ) является наибольшим целое число, которое не может быть представлено в виде a 1 h 1 + ... + a n h n с неотрицательным целым числом a 1 ,..., a n . Используя известные формулы для чисел Фробениуса, мы можем определить наихудшую сложность сортировки Шелла для нескольких классов пробельных последовательностей. [22] Доказанные результаты показаны в таблице выше.
Марк Аллен Вайс доказал, что сортировка Шелл выполняется за время O ( N log N ), когда входной массив находится в обратном порядке. [23]
Что касается среднего количества операций, ни один из доказанных результатов не касается практической последовательности разрывов. Для разрывов, которые являются степенями двойки, Эспелид вычислил это среднее значение как . [24] Кнут определил среднюю сложность сортировки массива из N элементов с двумя пробелами ( h , 1) как . [3] Отсюда следует, что двухпроходная сортировка Шелла с h = Θ( N 1/3 ) составляет в среднем O ( N 5/3 ) сравнения/инверсии/время выполнения. Яо нашел среднюю сложность трехпроходной сортировки Шелла. [25] Его результат был уточнен Янсоном и Кнутом: [26] среднее количество сравнений/инверсий/времени выполнения, выполненных во время сортировки Шелла с тремя пробелами ( ch , cg , 1), где h и g взаимно простые, равно в первом проходе, во втором проходе и в третьем проходе. ψ ( h , g ) в последней формуле — сложная функция, асимптотически равная . В частности, когда h = Θ( N 7/15 ) и g = Θ( N 1/5 ), среднее время сортировки O ( N 23/15 ).
На основании экспериментов предполагается, что сортировка Шелла с Хиббарда последовательностью пробелов выполняется за O ( N 5/4 ) среднее время, [3] и что последовательность Гонне и Баеза-Йейтса требует в среднем 0,41 N ln N (ln ln N + 1/6) перемещений элементов. [13] Приближения среднего числа операций, ранее предложенные для других последовательностей, терпят неудачу, когда отсортированные массивы содержат миллионы элементов.
На графике ниже показано среднее количество сравнений элементов, используемых различными последовательностями пробелов, разделенное на теоретическую нижнюю границу , т. е. log 2 N !. Последовательность Чуриа 1, 4, 10, 23, 57, 132, 301, 701 (обозначенная Ci01) была расширена в соответствии с формулой .
Применяя теорию колмогоровской сложности , Цзян, Ли и Витаньи [27] доказал следующую нижнюю оценку порядка среднего числа операций/времени выполнения в p- проходной сортировке Шелла: Ω( pN 1+1/ п ), когда p ≤ log 2 N , и Ω( pN ), когда > log 2 N. p Таким образом, сортировка Шелл имеет перспективы работать за среднее время, которое асимптотически растет как N log N, только при использовании последовательностей с пробелами, количество пробелов в которых растет пропорционально логарифму размера массива. Однако неизвестно, сможет ли сортировка Шелла достичь этого асимптотического порядка сложности в среднем, который является оптимальным для сортировок сравнением. Нижняя граница была улучшена Витаньи. [28] за каждое количество проходов к где . Из этого результата следует, например, нижняя граница Цзяна-Ли-Витаньи для всех -пропустить последовательности приращений и улучшить нижнюю границу для конкретных последовательностей приращений. Фактически все границы (нижние и верхние), известные в настоящее время для среднего случая, точно совпадают с этой нижней границей. Например, это дает новый результат: верхняя граница Янсона-Кнута совпадает с результирующей нижней границей для используемой последовательности приращений, показывая, что трехпроходная сортировка Шелла для этой последовательности приращений использует сравнения/инверсии/время выполнения. Формула позволяет нам искать последовательности приращений, которые дают неизвестные нижние границы; например, последовательность приращений для четырех проходов, нижняя граница которой превышает для последовательности приращений . Нижняя граница становится
Наихудшая сложность любой версии сортировки Шелл имеет более высокий порядок: Плакстон, Пунен и Суэл показали, что она растет по крайней мере так же быстро, как . [29] [30] Роберт Сайфер доказал более сильную нижнюю оценку: когда для всех . [31]
Приложения
[ редактировать ]Shellsort выполняет больше операций и имеет более высокий коэффициент промахов в кэше, чем быстрая сортировка . Однако, поскольку она может быть реализована с использованием небольшого количества кода и не использует стек вызовов , некоторые реализации функции qsort в стандартной библиотеке C, предназначенные для встраиваемых систем, используют ее вместо быстрой сортировки. Например, сортировка Шелл используется в библиотеке uClibc . [32] По тем же причинам в прошлом в ядре Linux использовалась Shellsort . [33]
Сортировка Шелл также может служить подалгоритмом интроспективной сортировки для сортировки коротких подмассивов и предотвращения замедления работы, когда глубина рекурсии превышает заданный предел. Этот принцип используется, например, в компрессоре bzip2 . [34]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: Перейти обратно: а б с Пратт, Воан Рональд (1979). Сортировка Шелла и сортировочные сети (выдающиеся диссертации в области компьютерных наук) (PDF) . Гирлянда. ISBN 978-0-8240-4406-0 . Архивировано (PDF) из оригинала 7 сентября 2021 года.
- ^ «Сортировка Шелл и сравнения» . Архивировано из оригинала 20 декабря 2019 года . Проверено 14 ноября 2015 г.
- ^ Jump up to: Перейти обратно: а б с д и Кнут, Дональд Э. (1997). «Метод Шелла». Искусство компьютерного программирования. Том 3: Сортировка и поиск (2-е изд.). Ридинг, Массачусетс: Аддисон-Уэсли. стр. 83–95. ISBN 978-0-201-89685-5 .
- ^ Jump up to: Перейти обратно: а б Шелл, Д.Л. (1959). «Процедура высокоскоростной сортировки» (PDF) . Коммуникации АКМ . 2 (7): 30–32. дои : 10.1145/368370.368387 . S2CID 28572656 . Архивировано из оригинала (PDF) 30 августа 2017 года . Проверено 18 октября 2011 г.
- ↑ В некоторых старых учебниках и справочниках этот сорт называется сортом «Шелл-Мецнер» в честь Марлен Мецнер Нортон , но, по словам Мецнера, «я не имел к этому сорту никакого отношения, и мое имя никогда не должно было быть связано с ним». Видеть «Сортировка Шелла» . Национальный институт стандартов и технологий . Проверено 17 июля 2007 г.
- ^ Jump up to: Перейти обратно: а б с Седжвик, Роберт (1998). Алгоритмы в C. Том. 1 (3-е изд.). Аддисон-Уэсли. стр. 273–281 . ISBN 978-0-201-31452-6 .
- ^ Керниган, Брайан В .; Ричи, Деннис М. (1996). Язык программирования C (2-е изд.). Прентис Холл. п. 62. ИСБН 978-7-302-02412-5 .
- ^ Фрэнк, РМ; Лазарь, РБ (1960). «Процедура высокоскоростной сортировки» . Коммуникации АКМ . 3 (1): 20–22. дои : 10.1145/366947.366957 . S2CID 34066017 .
- ^ Хиббард, Томас Н. (1963). «Эмпирическое исследование сортировки по минимальному объему памяти» . Коммуникации АКМ . 6 (5): 206–213. дои : 10.1145/366552.366557 . S2CID 12146844 .
- ^ Папернов А.А.; Стасевич, Г. В. (1965). «Метод сортировки информации в памяти компьютера» (PDF) . Проблемы передачи информации . 1 (3): 63–75.
- ^ Инчерпи, Джанет; Седжвик, Роберт (1985). «Улучшенные верхние границы сортировки Шелла» (PDF) . Журнал компьютерных и системных наук . 31 (2): 210–224. дои : 10.1016/0022-0000(85)90042-x .
- ^ Седжвик, Роберт (1986). «Новая верхняя граница сортировки Шелл». Журнал алгоритмов . 7 (2): 159–173. дои : 10.1016/0196-6774(86)90001-5 .
- ^ Jump up to: Перейти обратно: а б с Гонне, Гастон Х.; Баеза-Йейтс, Рикардо (1991). «Шеллсорт». Справочник по алгоритмам и структурам данных: в Паскале и C (2-е изд.). Ридинг, Массачусетс: Аддисон-Уэсли. стр. 161–163. ISBN 978-0-201-41607-7 .
Обширные эксперименты показывают, что последовательность, определяемая α = 0,45454 <5/11, работает значительно лучше, чем другие последовательности. Самый простой способ вычислить ⌊ 0,45454 n ⌋ — это
(5 * n — 1)/11
используя целочисленную арифметику. - ^ Токуда, Наоюки (1992). «Улучшенная сортировка Шелл». Ван Левен, Ян (ред.). Материалы 12-го Всемирного компьютерного конгресса ИФИП по алгоритмам, программному обеспечению и архитектуре . Амстердам: North-Holland Publishing Co., стр. 449–457. ISBN 978-0-444-89747-3 .
- ^ Jump up to: Перейти обратно: а б Чуура, Марчин (2001). «Наилучшие приращения для среднего случая сортировки Шелла» (PDF) . Во Фрайвальде, Русинс (ред.). Материалы 13-го Международного симпозиума по основам теории вычислений . Лондон: Springer-Verlag. стр. 106–117. ISBN 978-3-540-42487-1 . Архивировано из оригинала (PDF) 23 сентября 2018 года.
- ^ Ли, Ин Вай (21 декабря 2021 г.). «Эмпирически улучшенная последовательность пробелов Токуда в сортировке Шелл». arXiv : 2112.11112 [ cs.DS ].
- ^ Скин, Оскар; Эренборг, Ричард; Яромчик, Ежи В. (1 января 2023 г.). «Перспективы оптимизации сортировки Шелла». arXiv : 2301.00316 [ cs.DS ].
- ^ Седжвик, Роберт (1998). «Шеллсорт». Алгоритмы на C++, части 1–4: основы, структура данных, сортировка, поиск . Ридинг, Массачусетс: Аддисон-Уэсли. стр. 285–292. ISBN 978-0-201-35088-3 .
- ^ Форшелл, Олоф (22 мая 2018 г.). «Как выбрать длину моих подпоследовательностей для сортировки оболочки?» . Переполнение стека . Дополнительный комментарий к статье «Самая быстрая последовательность пробелов для сортировки оболочки»? (23 мая 2018 г.).
- ^ Ли, Ин Вай (21 декабря 2021 г.). «Оптимальные последовательности пробелов в сортировке Шелла для n ≤ 16 элементов». arXiv : 2112.11127 [ math.CO ].
- ^ Гейл, Дэвид ; Карп, Ричард М. (апрель 1972 г.). «Феномен в теории сортировки» (PDF) . Журнал компьютерных и системных наук . 6 (2): 103–115. дои : 10.1016/S0022-0000(72)80016-3 .
- ^ Зельмер, Эрнст С. (март 1989 г.). «О сортировке Шелла и проблеме Фробениуса» (PDF) . БИТ Численная математика . 29 (1): 37–40. дои : 10.1007/BF01932703 . HDL : 1956/19572 . S2CID 32467267 .
- ^ Вайс, Марк Аллен (1989). «Хороший случай для Shellsort». Конгресс графов . 73 : 59–62.
- ^ Эспелид, Терье О. (декабрь 1973 г.). «Анализ алгоритма сортировки Шелла». БИТ Численная математика . 13 (4): 394–400. дои : 10.1007/BF01933401 . S2CID 119443598 . Цитируемый результат представляет собой уравнение (8) на стр. 399.
- ^ Яо, Эндрю Чи-Чи (1980). «Анализ ( h , k , 1)-сортировки Шелла» (PDF) . Журнал алгоритмов . 1 (1): 14–50. дои : 10.1016/0196-6774(80)90003-6 . S2CID 3054966 . СТАН-CS-79-726. Архивировано из оригинала (PDF) 4 марта 2019 года.
- ^ Янсон, Сванте ; Кнут, Дональд Э. (1997). «Сортировка Шелл с тремя приращениями» (PDF) . Случайные структуры и алгоритмы . 10 (1–2): 125–142. arXiv : cs/9608105 . CiteSeerX 10.1.1.54.9911 . doi : 10.1002/(SICI)1098-2418(199701/03)10:1/2<125::AID-RSA6>3.0.CO;2-X .
- ^ Цзян, Тао; Ли, Мин ; Витаньи, Пол (сентябрь 2000 г.). «Нижняя граница средней сложности сортировки Шелла» (PDF ) Журнал АКМ . 47 (5): 905–911. arXiv : cs/9906008 . CiteSeerX 10.1.1.6.6508 . дои : 10.1145/355483.355488 . S2CID 3265123 .
- ^ Витаньи, Пол (март 2018 г.). «О сложности сортировки Шелла в среднем» (PDF) . Случайные структуры и алгоритмы . 52 (2): 354–363. arXiv : 1501.06461 . дои : 10.1002/rsa.20737 . S2CID 6833808 .
- ^ Плакстон, К. Грег; Пунен, Бьёрн ; Суэл, Торстен (24–27 октября 1992 г.). «Улучшенные нижние оценки для сортировки Шелла» (PDF) . Труды., 33-й ежегодный симпозиум по основам информатики . Том. 33. Питтсбург, США. стр. 226–235. CiteSeerX 10.1.1.43.1393 . дои : 10.1109/SFCS.1992.267769 . ISBN 978-0-8186-2900-6 . S2CID 15095863 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Плакстон, К. Грег; Суэл, Торстен (май 1997 г.). «Нижние границы сортировки Шелла» (PDF) . Журнал алгоритмов . 23 (2): 221–240. CiteSeerX 10.1.1.460.2429 . дои : 10.1006/jagm.1996.0825 .
- ^ Сайфер, Роберт (1993). «Нижняя граница размера сортировочных сетей Shellsort». SIAM Journal по вычислительной технике . 22 : 62–71. дои : 10.1137/0222006 .
- ^ Новоа, Мануэль III. "libc/stdlib/stdlib.c" . Проверено 29 октября 2014 г.
- ^ "ядро/группы.c" . Гитхаб . Проверено 5 мая 2012 г.
- ^ Джулиан Сьюард. "bzip2/blocksort.c" . Проверено 30 марта 2011 г.
Библиография
[ редактировать ]- Кнут, Дональд Э. (1997). «Метод Шелла». Искусство компьютерного программирования. Том 3: Сортировка и поиск (2-е изд.). Ридинг, Массачусетс: Аддисон-Уэсли. стр. 83–95. ISBN 978-0-201-89685-5 .
- Анализ сортировки Шелла и связанных с ней алгоритмов , Роберт Седжвик, Четвертый европейский симпозиум по алгоритмам, Барселона, сентябрь 1996 г.
Внешние ссылки
[ редактировать ]- Анимированные алгоритмы сортировки: сортировка Шелла в Wayback Machine (архивировано 10 марта 2015 г.) - графическая демонстрация
- Шеллсорт с пробелами 5, 3, 1 как венгерский народный танец