Алгоритм сортировки
Алгоритм сортировки — это алгоритм для упорядочивания элементов в списке. В случае, когда элемент в списке имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо данные, никак не влияющие на работу алгоритма.
История

Первые прототипы современных методов сортировки появились уже в XIX веке. К 1890 году для ускорения обработки данных переписи населения в США американец Герман Холлерит создал первый статистический табулятор — электромеханическую машину, предназначенную для автоматической обработки информации, записанной на перфокартах. У машины Холлерита имелся специальный «сортировальный ящик» из 26 внутренних отделений. При работе с машиной от оператора требовалось вставить перфокарту и опустить рукоятку. Благодаря пробитым на перфокарте отверстиям замыкалась определённая электрическая цепь, и на единицу увеличивалось показание связанного с ней циферблата. Одновременно с этим открывалась одна из 26 крышек сортировального ящика, и в соответствующее отделение перемещалась перфокарта, после чего крышка закрывалась. Данная машина позволила обрабатывать около 50 карт в минуту, что ускорило обработку данных в 3 раза. К переписи населения 1900 года Холлерит усовершенствовал машину, автоматизировав подачу карт. Работа сортировальной машины Холлерита основывалась на методах поразрядной сортировки. В патенте на машину обозначена сортировка «по отдельности для каждого столбца», но не определён порядок. В другой аналогичной машине, запатентованной в 1894 году Джоном Гором, упоминается сортировка со столбца десятков. Метод сортировки, начиная со столбца единиц, впервые появляется в литературе в конце 1930-х годов. К этому времени сортировальные машины уже позволяли обрабатывать до 400 карт в минуту.

В дальнейшем история алгоритмов оказалась связана с развитием электронно-вычислительных машин. По некоторым источникам, именно программа сортировки стала первой программой для вычислительных машин. Некоторые конструкторы ЭВМ, в частности разработчики EDVAC, называли задачу сортировки данных наиболее характерной нечисловой задачей для вычислительных машин. В 1945 году Джон фон Нейман для тестирования ряда команд для EDVAC разработал программы сортировки методом слияния. В том же году немецкий инженер Конрад Цузе разработал программу для сортировки методом простой вставки. К этому времени уже появились быстрые специализированные сортировальные машины, в сопоставлении с которыми и оценивалась эффективность разрабатываемых ЭВМ. Первым опубликованным обсуждением сортировки с помощью вычислительных машин стала лекция Джона Мокли, прочитанная им в 1946 году. Мокли показал, что сортировка может быть полезной также и для численных расчётов, описал методы сортировки простой вставки и бинарных вставок, а также поразрядную сортировку с частичными проходами. Позже организованная им совместно с инженером Джоном Эккертом компания «Eckert–Mauchly Computer Corporation» выпустила некоторые из самых ранних электронных вычислительных машин BINAC и UNIVAC. Наряду с отмеченными алгоритмами внутренней сортировки появлялись алгоритмы внешней сортировки, развитию которых способствовал ограниченный объём памяти первых вычислительных машин. В частности, были предложены методы сбалансированной двухпутевой поразрядной сортировки и сбалансированного двухпутевого слияния.

К 1952 году на практике уже применялись многие методы внутренней сортировки, но теория была развита сравнительно слабо. В октябре 1952 года Даниэль Гольденберг привёл пять методов сортировки с анализом наилучшего и наихудшего случаев для каждого из них. В 1954 году Гарольд Сьюворд развил идеи Гольденберга, а также проанализировал методы внешней сортировки. Говард Демут в 1956 году рассмотрел три абстрактные модели задачи сортировки: с использованием циклической памяти, линейной памяти и памяти с произвольным доступом. Для каждой из этих задач автор предложил оптимальные или почти оптимальные методы сортировки, что помогло связать теорию с практикой. Из-за малого числа людей, связанных с вычислительной техникой, эти доклады не появлялись в «открытой литературе». Первой большой обзорной статьёй о сортировке, появившейся в печати в 1955 году, стала работа Дж. Хоскена, в которой он описал всё имевшееся на тот момент оборудование специального назначения и методы сортировки для ЭВМ, основываясь на брошюрах фирм-изготовителей. В 1956 году Э. Френд в своей работе проанализировал математические свойства большого числа алгоритмов внутренней и внешней сортировки, предложив некоторые новые методы.
После этого было предложено множество различных алгоритмов сортировки: например, вычисление адреса в 1956 году; слияние со вставкой, обменная поразрядная сортировка, каскадное слияние и метод Шелла в 1959 году, многофазное слияние и вставки в дерево в 1960 году, осциллирующая сортировка и быстрая сортировка Хоара в 1962 году, пирамидальная сортировка Уильямса и обменная сортировка со слиянием Бэтчера в 1964 году. В конце 60-х годов произошло и интенсивное развитие теории сортировки. Появившиеся позже алгоритмы во многом являлись вариациями уже известных методов. Получили распространение адаптивные методы сортировки, ориентированные на более быстрое выполнение в случаях, когда входная последовательность удовлетворяет заранее установленным критериям.
Формулировка задачи
Пусть требуется упорядочить N элементов: . Каждый элемент представляет собой запись
, содержащую некоторую информацию и ключ
, управляющий процессом сортировки. На множестве ключей определено отношение порядка «<» так, чтобы для любых трёх значений ключей
выполнялись следующие условия:
- [англ.]: либо
, либо
, либо
;
- закон транзитивности: если
и
, то
.
Данные условия определяют математическое понятие линейного или совершенного упорядочения, а удовлетворяющие им множества поддаются сортировке большинством методов.
Задачей сортировки является нахождение такой перестановки записей с индексами
, после которой ключи расположились бы в порядке неубывания:
Сортировка называется устойчивой, если не меняет взаимного расположения элементов с одинаковыми ключами:
для любых
и
.
Методы сортировки можно разделить на внутренние и внешние. Внутренняя сортировка используется для данных, помещающихся в оперативную память, за счёт чего является более гибкой в плане структур данных. При внешней сортировке данные в оперативную память не помещаются, и она ориентирована на достижение результата в условиях ограниченных ресурсов.
Оценка алгоритма сортировки
Достоверность этого раздела поставлена под сомнение. |
Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти:
- Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах мощности входного множества A. Если на вход алгоритму подаётся множество A, то обозначим n = |A|. Для типичного алгоритма хорошее поведение — это O(n log n) и плохое поведение — это O(n2). Идеальное поведение для упорядочения — O(n). Алгоритмы сортировки, использующие только абстрактную операцию сравнения ключей, всегда нуждаются по меньшей мере в сравнениях. Тем не менее, существует алгоритм сортировки Хана (Yijie Han) с вычислительной сложностью O(n log log n), использующий тот факт, что пространство ключей ограничено (он чрезвычайно сложен, а за О-обозначением скрывается весьма большой коэффициент, что делает невозможным его применение в повседневной практике). Также существует понятие сортирующих сетей. Предполагая, что можно одновременно (например, при параллельном вычислении) проводить несколько сравнений, можно отсортировать n чисел за O(log2n) операций. При этом число n должно быть заранее известно;
- Память — ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют O(log n) памяти. При оценке не учитывается место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы (так как всё это потребляет O(1)). Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте.
Оптимальность O(n log n) в общем случае
В общем случае задача сортировки предполагает, что единственной обязательно доступной операцией над элементами является сравнение. Ответом на сравнение элементов и
может быть один из двух вариантов:
или
. Поэтому если в ходе работы алгоритм совершает
сравнений, то всего возможно
вариантов комбинаций ответов на них.
Количество перестановок из элементов равно
. Для того, чтобы можно было сюръективно отобразить множество комбинаций ответов на множество всех перестановок, количество сравнений должно быть не меньше, чем
(поскольку сравнение — единственная разрешённая операция).
Прологарифмировав формулу Стирлинга, можно обнаружить, что
Свойства и типы
- Устойчивость — устойчивая сортировка не меняет взаимного расположения элементов с одинаковыми ключами.
- Естественность поведения — эффективность метода при обработке уже упорядоченных или частично упорядоченных данных. Алгоритм ведёт себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.
- Использование операции сравнения. Алгоритмы, использующие для сортировки сравнение элементов между собой, называются основанными на сравнениях. Минимальная трудоёмкость худшего случая для этих алгоритмов составляет
(
), но они отличаются гибкостью применения. Для специальных случаев (типов данных) существуют более эффективные алгоритмы.
Ещё одним важным свойством алгоритма является его сфера применения. Здесь основных типов упорядочения два:
- Внутренняя сортировка оперирует массивами, целиком помещающимися в оперативной памяти с произвольным доступом к любой ячейке. Данные обычно упорядочиваются на том же месте без дополнительных затрат.
- В современных архитектурах персональных компьютеров широко применяется подкачка и кэширование памяти. Алгоритм сортировки должен хорошо сочетаться с применяемыми алгоритмами кэширования и подкачки.
- Внешняя сортировка оперирует запоминающими устройствами большого объёма, но не с произвольным доступом, а последовательным (упорядочение файлов), то есть в данный момент «виден» только один элемент, а затраты на перемотку по сравнению с памятью неоправданно велики. Это накладывает некоторые дополнительные ограничения на алгоритм и приводит к специальным методам упорядочения, обычно использующим дополнительное дисковое пространство. Кроме того, доступ к данным во внешней памяти производится намного медленнее, чем операции с оперативной памятью.
- Доступ к носителю осуществляется последовательным образом: в каждый момент времени можно считать или записать только элемент, следующий за текущим.
- Объём данных не позволяет им разместиться в ОЗУ.
Также алгоритмы классифицируются по:
- потребности в дополнительной памяти или её отсутствию
- потребности в знаниях о структуре данных, выходящих за рамки операции сравнения, или отсутствию таковой
Обзор наиболее популярных алгоритмов сортировки
Этот раздел нужно дополнить. |
| Алгоритм | Описание | Время исполнения | Затраты памяти | Примечание | |
|---|---|---|---|---|---|
| В худшем случае | В среднем | В лучшем случае | |||
| Алгоритмы устойчивой сортировки | |||||
| Сортировка пузырьком (англ. Bubble sort) | Проходит по массиву, сравнивает последовательные пары элементов и меняет их местами, если они расположены в неправильном порядке. | В процессе сортировки минимальный элемент «всплывает» вверх массива, напоминая пузырь | |||
| Сортировка перемешиванием (англ. Cocktail sort) | Двунаправленный, оптимизированный вариант сортировки пузырьком | ||||
| Сортировка вставками (англ. Insertion sort) | Элементы входной последовательности просматриваются по одному, и каждый новый поступивший элемент размещается в подходящее место среди ранее упорядоченных элементов | ||||
| Гномья сортировка (англ. Gnome sort) | Гибрид сортировок вставками и пузырьком. | Название происходит от предполагаемого поведения садовых гномов при сортировке линии садовых горшков | |||
| Сортировка слиянием (англ. Merge sort) | Рекурсивно сортирует половины массива, а затем комбинирует их в один | ||||
| Сортировка с помощью двоичного дерева (англ. Tree sort) | На основе исходных данных строится двоичное дерево поиска, в котором последовательно собираются минимальные значения | ||||
| Сортировка Timsort (англ. Timsort) | Гибрид сортировок вставками и слиянием. Основан на предположении, что при решении практических задач входной массив зачастую состоит из отсортированных подмассивов | ||||
| Алгоритмы неустойчивой сортировки | |||||
| Сортировка выбором (англ. Selection sort) | Делит входной массив на упорядоченную и неупорядоченную части. Затем последовательно переносит в первую часть наименьшие элементы из второй | ||||
| Сортировка расчёской (англ. Comb sort) | Модификация сортировки пузырьком, в которой расстояние между сравниваемыми парами значений отлично от 1 | Несмотря на бо́льшую алгоритмическую сложность, при не очень больших размерах массива сортировка расчёской будет более эффективна, чем быстрая сортировка | |||
| Сортировка Шелла (англ. Shell sort) | Модификация сортировки вставками, в которой расстояние между сравниваемыми парами значений отлично от 1 | ||||
| Пирамидальная сортировка (сортировка кучи, Heapsort) | На основе исходных данных строится двоичная куча, в которой последовательно собираются минимальные значения | ||||
| Плавная сортировка (англ. Smoothsort) | Модификация пирамидальной сортировки, оптимизирующая сортировку частично упорядоченного массива | ||||
| Быстрая сортировка (англ. Quicksort) | Выбирается опорный элемент p. Все ключи, меньшие p, перемещаются влево от него, а все ключи, большие либо равные p, вправо. Далее алгоритм рекурсивно применяется к каждой из частей | ||||
| Интроспективная сортировка (англ. Introsort) | Гибрид быстрой и пирамидальной сортировок | ||||
| Придурковатая сортировка (англ. Stooge sort) | Меняет местами первый и последний элементы массива, если необходимо. Затем делит массив на три части, в каждой из которых запускается рекурсивно |
| Метод назван в честь американской комик-группы «Three stooges» («Три придурка»). Сходство заключается в том, что алгоритм безумно мечется по уже отсортированным третям массива. | ||
| Непрактичные алгоритмы сортировки | |||||
| Bogosort | Массив произвольно перемешивается до тех пор, пока не окажется отсортированным | Неограниченно | Используется только в академических целях | ||
| Генерируются все возможные последовательности массива, из которых выбирается упорядоченная | Используется только в академических целях | ||||
| Гравитационная сортировка (англ. Bead sort) | Числа представляются в виде бусинок на штырях, затем сортируются под действием гравитации | Требуется специализированное аппаратное обеспечение | |||
| Алгоритмы, не основывающиеся на сравнениях | |||||
| Блочная сортировка (англ. Bucket sort) | Элементы распределяются по блокам согласно диапазону значений, каждый из которых затем рекурсивно сортируется | ||||
| Поразрядная сортировка (англ. Radix sort) | Массив сортируется согласно с помощью поразрядного сравнения чисел | ||||
| Сортировка подсчётом (англ. Counting sort) | Подсчитывается количество вхождений каждого целого числа из диапазона ключей в массив. Затем выводится значения всех ненулевых значений | ||||
Сортировка строк
Одним из частых приложений алгоритмов сортировки является сортировка строк. Обобщённый алгоритм может выглядеть так: сначала множество строк сортируется по первому символу каждой строки, затем каждое подмножество строк, имеющих одинаковый первый символ, сортируется по второму символу, и так до тех пор, пока все строки не будут упорядочены. При этом отсутствующий символ (при сравнении строки длины N со строкой длины N+1) считается меньше любого символа.
Применение данного метода к строкам, представляющим собой числа в естественной записи, выдаёт контринтуитивные результаты: например, «9» оказывается больше, чем «11», так как первый символ первой строки имеет бо́льшее значение, чем первый символ второй. Для исправления этой проблемы алгоритм сортировки может преобразовывать сортируемые строки в числа и сортировать их как числа. Такой алгоритм называется «числовой сортировкой», а описанный ранее — «строковой сортировкой». Также на практике эффективным способом решения проблемы сортировки строк, содержащих числа, является добавление некоторого числа нулей перед числом, таким образом, «011» будет считаться больше «009».
См. также
- O-большое
- Временная сложность алгоритма
Примечания
- Кнут, 2007, с. 416.
- Кнут, 2007, с. 417.
- Кнут, 2007, с. 417-418.
- Кнут, 2007, с. 418.
- Кнут, 2007, с. 419.
- Кнут, 2007, с. 420.
- Кнут, 2007, с. 420-421.
- Кнут, 2007, с. 421.
- Кнут, 2007, с. 422.
- Кнут, 2007, с. 22.
- Кнут, 2007, с. 23.
- Han, Yijie. Deterministic sorting in O(n log log n) time and linear space (англ.) // Journal of Algorithms. Cognition, Informatics and Logic. — 2004. — Т. 50, № 1. — С. 96-105. — doi:10.1016/j.jalgor.2003.09.001. Архивировано 12 ноября 2020 года.
- Дональд Кнут. 5.3.1. Сортировка с минимальным числом сравнений // Искусство программирования. — 2-е. — Вильямс, 2002.
- Кнут, 2007.
Литература
- Кнут Д. Э. Искусство программирования. Том 3. Сортировка и поиск = The Art of Computer Programming. Volume 3. Sorting and Searching / под ред. В. Т. Тертышного (гл. 5) и И. В. Красикова (гл. 6). — 2-е изд. — Москва: Вильямс, 2007. — Т. 3. — 832 с. — ISBN 5-8459-0082-1.
- Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 2-е изд. — М.: , 2006. — С. 1296. — ISBN 5-8459-0857-4.
- Роберт Седжвик. Фундаментальные алгоритмы на C. Анализ/Структуры данных/Сортировка/Поиск = Algorithms in C. Fundamentals/Data Structures/Sorting/Searching. — СПб.: ДиаСофтЮП, 2003. — С. 672. — ISBN 5-93772-081-4.
- Magnus Lie Hetland. Python Algorithms: Mastering Basic Algorithms in the Python Language. — Apress, 2010. — 336 с. — ISBN 978-1-4302-3237-7.
Ссылки
- Теория, задачи, тестирующая система
- Алгоритмы сортировки на algolist.manual.ru
- Анимированное сравнение алгоритмов сортировки (англ.)
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Алгоритм сортировки, Что такое Алгоритм сортировки? Что означает Алгоритм сортировки?
Algoritm sortirovki eto algoritm dlya uporyadochivaniya elementov v spiske V sluchae kogda element v spiske imeet neskolko polej pole sluzhashee kriteriem poryadka nazyvaetsya klyuchom sortirovki Na praktike v kachestve klyucha chasto vystupaet chislo a v ostalnyh polyah hranyatsya kakie libo dannye nikak ne vliyayushie na rabotu algoritma IstoriyaTabulyator Hollerita s sortirovalnym yashikom Pervye prototipy sovremennyh metodov sortirovki poyavilis uzhe v XIX veke K 1890 godu dlya uskoreniya obrabotki dannyh perepisi naseleniya v SShA amerikanec German Hollerit sozdal pervyj statisticheskij tabulyator elektromehanicheskuyu mashinu prednaznachennuyu dlya avtomaticheskoj obrabotki informacii zapisannoj na perfokartah U mashiny Hollerita imelsya specialnyj sortirovalnyj yashik iz 26 vnutrennih otdelenij Pri rabote s mashinoj ot operatora trebovalos vstavit perfokartu i opustit rukoyatku Blagodarya probitym na perfokarte otverstiyam zamykalas opredelyonnaya elektricheskaya cep i na edinicu uvelichivalos pokazanie svyazannogo s nej ciferblata Odnovremenno s etim otkryvalas odna iz 26 kryshek sortirovalnogo yashika i v sootvetstvuyushee otdelenie peremeshalas perfokarta posle chego kryshka zakryvalas Dannaya mashina pozvolila obrabatyvat okolo 50 kart v minutu chto uskorilo obrabotku dannyh v 3 raza K perepisi naseleniya 1900 goda Hollerit usovershenstvoval mashinu avtomatizirovav podachu kart Rabota sortirovalnoj mashiny Hollerita osnovyvalas na metodah porazryadnoj sortirovki V patente na mashinu oboznachena sortirovka po otdelnosti dlya kazhdogo stolbca no ne opredelyon poryadok V drugoj analogichnoj mashine zapatentovannoj v 1894 godu Dzhonom Gorom upominaetsya sortirovka so stolbca desyatkov Metod sortirovki nachinaya so stolbca edinic vpervye poyavlyaetsya v literature v konce 1930 h godov K etomu vremeni sortirovalnye mashiny uzhe pozvolyali obrabatyvat do 400 kart v minutu EDVAC V dalnejshem istoriya algoritmov okazalas svyazana s razvitiem elektronno vychislitelnyh mashin Po nekotorym istochnikam imenno programma sortirovki stala pervoj programmoj dlya vychislitelnyh mashin Nekotorye konstruktory EVM v chastnosti razrabotchiki EDVAC nazyvali zadachu sortirovki dannyh naibolee harakternoj nechislovoj zadachej dlya vychislitelnyh mashin V 1945 godu Dzhon fon Nejman dlya testirovaniya ryada komand dlya EDVAC razrabotal programmy sortirovki metodom sliyaniya V tom zhe godu nemeckij inzhener Konrad Cuze razrabotal programmu dlya sortirovki metodom prostoj vstavki K etomu vremeni uzhe poyavilis bystrye specializirovannye sortirovalnye mashiny v sopostavlenii s kotorymi i ocenivalas effektivnost razrabatyvaemyh EVM Pervym opublikovannym obsuzhdeniem sortirovki s pomoshyu vychislitelnyh mashin stala lekciya Dzhona Mokli prochitannaya im v 1946 godu Mokli pokazal chto sortirovka mozhet byt poleznoj takzhe i dlya chislennyh raschyotov opisal metody sortirovki prostoj vstavki i binarnyh vstavok a takzhe porazryadnuyu sortirovku s chastichnymi prohodami Pozzhe organizovannaya im sovmestno s inzhenerom Dzhonom Ekkertom kompaniya Eckert Mauchly Computer Corporation vypustila nekotorye iz samyh rannih elektronnyh vychislitelnyh mashin BINAC i UNIVAC Naryadu s otmechennymi algoritmami vnutrennej sortirovki poyavlyalis algoritmy vneshnej sortirovki razvitiyu kotoryh sposobstvoval ogranichennyj obyom pamyati pervyh vychislitelnyh mashin V chastnosti byli predlozheny metody sbalansirovannoj dvuhputevoj porazryadnoj sortirovki i sbalansirovannogo dvuhputevogo sliyaniya Bystraya sortirovka Hoara K 1952 godu na praktike uzhe primenyalis mnogie metody vnutrennej sortirovki no teoriya byla razvita sravnitelno slabo V oktyabre 1952 goda Daniel Goldenberg privyol pyat metodov sortirovki s analizom nailuchshego i naihudshego sluchaev dlya kazhdogo iz nih V 1954 godu Garold Syuvord razvil idei Goldenberga a takzhe proanaliziroval metody vneshnej sortirovki Govard Demut v 1956 godu rassmotrel tri abstraktnye modeli zadachi sortirovki s ispolzovaniem ciklicheskoj pamyati linejnoj pamyati i pamyati s proizvolnym dostupom Dlya kazhdoj iz etih zadach avtor predlozhil optimalnye ili pochti optimalnye metody sortirovki chto pomoglo svyazat teoriyu s praktikoj Iz za malogo chisla lyudej svyazannyh s vychislitelnoj tehnikoj eti doklady ne poyavlyalis v otkrytoj literature Pervoj bolshoj obzornoj statyoj o sortirovke poyavivshejsya v pechati v 1955 godu stala rabota Dzh Hoskena v kotoroj on opisal vsyo imevsheesya na tot moment oborudovanie specialnogo naznacheniya i metody sortirovki dlya EVM osnovyvayas na broshyurah firm izgotovitelej V 1956 godu E Frend v svoej rabote proanaliziroval matematicheskie svojstva bolshogo chisla algoritmov vnutrennej i vneshnej sortirovki predlozhiv nekotorye novye metody Posle etogo bylo predlozheno mnozhestvo razlichnyh algoritmov sortirovki naprimer vychislenie adresa v 1956 godu sliyanie so vstavkoj obmennaya porazryadnaya sortirovka kaskadnoe sliyanie i metod Shella v 1959 godu mnogofaznoe sliyanie i vstavki v derevo v 1960 godu oscilliruyushaya sortirovka i bystraya sortirovka Hoara v 1962 godu piramidalnaya sortirovka Uilyamsa i obmennaya sortirovka so sliyaniem Betchera v 1964 godu V konce 60 h godov proizoshlo i intensivnoe razvitie teorii sortirovki Poyavivshiesya pozzhe algoritmy vo mnogom yavlyalis variaciyami uzhe izvestnyh metodov Poluchili rasprostranenie adaptivnye metody sortirovki orientirovannye na bolee bystroe vypolnenie v sluchayah kogda vhodnaya posledovatelnost udovletvoryaet zaranee ustanovlennym kriteriyam Formulirovka zadachiPust trebuetsya uporyadochit N elementov R1 R2 Rn displaystyle R 1 R 2 dots R n Kazhdyj element predstavlyaet soboj zapis Rj displaystyle R j soderzhashuyu nekotoruyu informaciyu i klyuch Kj displaystyle K j upravlyayushij processom sortirovki Na mnozhestve klyuchej opredeleno otnoshenie poryadka lt tak chtoby dlya lyubyh tryoh znachenij klyuchej a b c displaystyle a b c vypolnyalis sleduyushie usloviya angl libo a lt b displaystyle a lt b libo a gt b displaystyle a gt b libo a b displaystyle a b zakon tranzitivnosti esli a lt b displaystyle a lt b i b lt c displaystyle b lt c to a lt c displaystyle a lt c Dannye usloviya opredelyayut matematicheskoe ponyatie linejnogo ili sovershennogo uporyadocheniya a udovletvoryayushie im mnozhestva poddayutsya sortirovke bolshinstvom metodov Zadachej sortirovki yavlyaetsya nahozhdenie takoj perestanovki zapisej p 1 p 2 p n displaystyle p 1 p 2 dots p n s indeksami 1 2 N displaystyle 1 2 dots N posle kotoroj klyuchi raspolozhilis by v poryadke neubyvaniya Kp 1 Kp 2 Kp n displaystyle K p 1 leqslant K p 2 leqslant dots leqslant K p n Sortirovka nazyvaetsya ustojchivoj esli ne menyaet vzaimnogo raspolozheniya elementov s odinakovymi klyuchami p i lt p j displaystyle p i lt p j dlya lyubyh Kp i Kp j displaystyle K p i K p j i i lt j displaystyle i lt j Metody sortirovki mozhno razdelit na vnutrennie i vneshnie Vnutrennyaya sortirovka ispolzuetsya dlya dannyh pomeshayushihsya v operativnuyu pamyat za schyot chego yavlyaetsya bolee gibkoj v plane struktur dannyh Pri vneshnej sortirovke dannye v operativnuyu pamyat ne pomeshayutsya i ona orientirovana na dostizhenie rezultata v usloviyah ogranichennyh resursov Ocenka algoritma sortirovkiDostovernost etogo razdela postavlena pod somnenie Neobhodimo proverit tochnost faktov i dostovernost svedenij izlozhennyh v etom razdele Algoritmy sortirovki ocenivayutsya po skorosti vypolneniya i effektivnosti ispolzovaniya pamyati Vremya osnovnoj parametr harakterizuyushij bystrodejstvie algoritma Nazyvaetsya takzhe vychislitelnoj slozhnostyu Dlya uporyadocheniya vazhny hudshee srednee i luchshee povedenie algoritma v terminah moshnosti vhodnogo mnozhestva A Esli na vhod algoritmu podayotsya mnozhestvo A to oboznachim n A Dlya tipichnogo algoritma horoshee povedenie eto O n log n i plohoe povedenie eto O n2 Idealnoe povedenie dlya uporyadocheniya O n Algoritmy sortirovki ispolzuyushie tolko abstraktnuyu operaciyu sravneniya klyuchej vsegda nuzhdayutsya po menshej mere v sravneniyah Tem ne menee sushestvuet algoritm sortirovki Hana Yijie Han s vychislitelnoj slozhnostyu O n log log n ispolzuyushij tot fakt chto prostranstvo klyuchej ogranicheno on chrezvychajno slozhen a za O oboznacheniem skryvaetsya vesma bolshoj koefficient chto delaet nevozmozhnym ego primenenie v povsednevnoj praktike Takzhe sushestvuet ponyatie sortiruyushih setej Predpolagaya chto mozhno odnovremenno naprimer pri parallelnom vychislenii provodit neskolko sravnenij mozhno otsortirovat n chisel za O log2n operacij Pri etom chislo n dolzhno byt zaranee izvestno Pamyat ryad algoritmov trebuet vydeleniya dopolnitelnoj pamyati pod vremennoe hranenie dannyh Kak pravilo eti algoritmy trebuyut O log n pamyati Pri ocenke ne uchityvaetsya mesto kotoroe zanimaet ishodnyj massiv i nezavisyashie ot vhodnoj posledovatelnosti zatraty naprimer na hranenie koda programmy tak kak vsyo eto potreblyaet O 1 Algoritmy sortirovki ne potreblyayushie dopolnitelnoj pamyati otnosyat k sortirovkam na meste Optimalnost O n log n v obshem sluchae V obshem sluchae zadacha sortirovki predpolagaet chto edinstvennoj obyazatelno dostupnoj operaciej nad elementami yavlyaetsya sravnenie Otvetom na sravnenie elementov a displaystyle a i b displaystyle b mozhet byt odin iz dvuh variantov a b displaystyle a leq b ili a gt b displaystyle a gt b Poetomu esli v hode raboty algoritm sovershaet k displaystyle k sravnenij to vsego vozmozhno 2k displaystyle 2 k variantov kombinacij otvetov na nih Kolichestvo perestanovok iz n displaystyle n elementov ravno n displaystyle n Dlya togo chtoby mozhno bylo syurektivno otobrazit mnozhestvo kombinacij otvetov na mnozhestvo vseh perestanovok kolichestvo sravnenij dolzhno byt ne menshe chem log2 n displaystyle log 2 n poskolku sravnenie edinstvennaya razreshyonnaya operaciya Prologarifmirovav formulu Stirlinga mozhno obnaruzhit chto log2 n log2 2pn ne n nlog n O n W nlog n displaystyle log 2 n log 2 left sqrt 2 pi n left frac n e right n right n log n O n Omega n log n Svojstva i tipyUstojchivost ustojchivaya sortirovka ne menyaet vzaimnogo raspolozheniya elementov s odinakovymi klyuchami Estestvennost povedeniya effektivnost metoda pri obrabotke uzhe uporyadochennyh ili chastichno uporyadochennyh dannyh Algoritm vedyot sebya estestvenno esli uchityvaet etu harakteristiku vhodnoj posledovatelnosti i rabotaet luchshe Ispolzovanie operacii sravneniya Algoritmy ispolzuyushie dlya sortirovki sravnenie elementov mezhdu soboj nazyvayutsya osnovannymi na sravneniyah Minimalnaya trudoyomkost hudshego sluchaya dlya etih algoritmov sostavlyaet O displaystyle O n log n displaystyle n cdot log n no oni otlichayutsya gibkostyu primeneniya Dlya specialnyh sluchaev tipov dannyh sushestvuyut bolee effektivnye algoritmy Eshyo odnim vazhnym svojstvom algoritma yavlyaetsya ego sfera primeneniya Zdes osnovnyh tipov uporyadocheniya dva Vnutrennyaya sortirovka operiruet massivami celikom pomeshayushimisya v operativnoj pamyati s proizvolnym dostupom k lyuboj yachejke Dannye obychno uporyadochivayutsya na tom zhe meste bez dopolnitelnyh zatrat V sovremennyh arhitekturah personalnyh kompyuterov shiroko primenyaetsya podkachka i keshirovanie pamyati Algoritm sortirovki dolzhen horosho sochetatsya s primenyaemymi algoritmami keshirovaniya i podkachki Vneshnyaya sortirovka operiruet zapominayushimi ustrojstvami bolshogo obyoma no ne s proizvolnym dostupom a posledovatelnym uporyadochenie fajlov to est v dannyj moment viden tolko odin element a zatraty na peremotku po sravneniyu s pamyatyu neopravdanno veliki Eto nakladyvaet nekotorye dopolnitelnye ogranicheniya na algoritm i privodit k specialnym metodam uporyadocheniya obychno ispolzuyushim dopolnitelnoe diskovoe prostranstvo Krome togo dostup k dannym vo vneshnej pamyati proizvoditsya namnogo medlennee chem operacii s operativnoj pamyatyu Dostup k nositelyu osushestvlyaetsya posledovatelnym obrazom v kazhdyj moment vremeni mozhno schitat ili zapisat tolko element sleduyushij za tekushim Obyom dannyh ne pozvolyaet im razmestitsya v OZU Takzhe algoritmy klassificiruyutsya po potrebnosti v dopolnitelnoj pamyati ili eyo otsutstviyu potrebnosti v znaniyah o strukture dannyh vyhodyashih za ramki operacii sravneniya ili otsutstviyu takovojObzor naibolee populyarnyh algoritmov sortirovkiEtot razdel nuzhno dopolnit Pozhalujsta uluchshite i dopolnite razdel 12 marta 2022 Algoritm Opisanie Vremya ispolneniya Zatraty pamyati PrimechanieV hudshem sluchae V srednem V luchshem sluchaeAlgoritmy ustojchivoj sortirovkiSortirovka puzyrkom angl Bubble sort Prohodit po massivu sravnivaet posledovatelnye pary elementov i menyaet ih mestami esli oni raspolozheny v nepravilnom poryadke O n2 displaystyle O n 2 O n2 displaystyle O n 2 O 1 displaystyle O 1 V processe sortirovki minimalnyj element vsplyvaet vverh massiva napominaya puzyrSortirovka peremeshivaniem angl Cocktail sort Dvunapravlennyj optimizirovannyj variant sortirovki puzyrkom O n2 displaystyle O n 2 O n2 displaystyle O n 2 O 1 displaystyle O 1 Sortirovka vstavkami angl Insertion sort Elementy vhodnoj posledovatelnosti prosmatrivayutsya po odnomu i kazhdyj novyj postupivshij element razmeshaetsya v podhodyashee mesto sredi ranee uporyadochennyh elementov O n2 displaystyle O n 2 O n2 displaystyle O n 2 O 1 displaystyle O 1 Gnomya sortirovka angl Gnome sort Gibrid sortirovok vstavkami i puzyrkom O n2 displaystyle O n 2 O n2 displaystyle O n 2 O 1 displaystyle O 1 Nazvanie proishodit ot predpolagaemogo povedeniya sadovyh gnomov pri sortirovke linii sadovyh gorshkovSortirovka sliyaniem angl Merge sort Rekursivno sortiruet poloviny massiva a zatem kombiniruet ih v odin O nlog n displaystyle O n log n O nlog n displaystyle O n log n O n displaystyle O n Sortirovka s pomoshyu dvoichnogo dereva angl Tree sort Na osnove ishodnyh dannyh stroitsya dvoichnoe derevo poiska v kotorom posledovatelno sobirayutsya minimalnye znacheniya O n2 displaystyle O n 2 O nlog n displaystyle O n log n O n displaystyle O n Sortirovka Timsort angl Timsort Gibrid sortirovok vstavkami i sliyaniem Osnovan na predpolozhenii chto pri reshenii prakticheskih zadach vhodnoj massiv zachastuyu sostoit iz otsortirovannyh podmassivov O nlog n displaystyle O n log n O nlog n displaystyle O n log n O n displaystyle O n Algoritmy neustojchivoj sortirovkiSortirovka vyborom angl Selection sort Delit vhodnoj massiv na uporyadochennuyu i neuporyadochennuyu chasti Zatem posledovatelno perenosit v pervuyu chast naimenshie elementy iz vtoroj O n2 displaystyle O n 2 O n2 displaystyle O n 2 O 1 displaystyle O 1 Sortirovka raschyoskoj angl Comb sort Modifikaciya sortirovki puzyrkom v kotoroj rasstoyanie mezhdu sravnivaemymi parami znachenij otlichno ot 1 O n2 displaystyle O n 2 O n2 2p displaystyle O n 2 2 p O 1 displaystyle O 1 Nesmotrya na bo lshuyu algoritmicheskuyu slozhnost pri ne ochen bolshih razmerah massiva sortirovka raschyoskoj budet bolee effektivna chem bystraya sortirovkaSortirovka Shella angl Shell sort Modifikaciya sortirovki vstavkami v kotoroj rasstoyanie mezhdu sravnivaemymi parami znachenij otlichno ot 1 O n2 displaystyle O n 2 O nlog2 n displaystyle O n log 2 n O 1 displaystyle O 1 Piramidalnaya sortirovka sortirovka kuchi Heapsort Na osnove ishodnyh dannyh stroitsya dvoichnaya kucha v kotoroj posledovatelno sobirayutsya minimalnye znacheniya O nlog n displaystyle O n log n O nlog n displaystyle O n log n O 1 displaystyle O 1 Plavnaya sortirovka angl Smoothsort Modifikaciya piramidalnoj sortirovki optimiziruyushaya sortirovku chastichno uporyadochennogo massiva O nlog n displaystyle O n log n O nlog n displaystyle O n log n O n displaystyle O n Bystraya sortirovka angl Quicksort Vybiraetsya opornyj element p Vse klyuchi menshie p peremeshayutsya vlevo ot nego a vse klyuchi bolshie libo ravnye p vpravo Dalee algoritm rekursivno primenyaetsya k kazhdoj iz chastej O n2 displaystyle O n 2 O nlog n displaystyle O n log n O log n displaystyle O log n Introspektivnaya sortirovka angl Introsort Gibrid bystroj i piramidalnoj sortirovok O nlog n displaystyle O n log n O nlog n displaystyle O n log n O n displaystyle O n Pridurkovataya sortirovka angl Stooge sort Menyaet mestami pervyj i poslednij elementy massiva esli neobhodimo Zatem delit massiv na tri chasti v kazhdoj iz kotoryh zapuskaetsya rekursivno O nlog 3 log 1 5 displaystyle O n log 3 log 1 5 O n2 709 displaystyle O n 2 709 O n2 709 displaystyle O n 2 709 O 1 displaystyle O 1 Metod nazvan v chest amerikanskoj komik gruppy Three stooges Tri pridurka Shodstvo zaklyuchaetsya v tom chto algoritm bezumno mechetsya po uzhe otsortirovannym tretyam massiva Nepraktichnye algoritmy sortirovkiBogosort Massiv proizvolno peremeshivaetsya do teh por poka ne okazhetsya otsortirovannym Neogranichenno O n displaystyle O n O 1 displaystyle O 1 Ispolzuetsya tolko v akademicheskih celyahGeneriruyutsya vse vozmozhnye posledovatelnosti massiva iz kotoryh vybiraetsya uporyadochennaya O n displaystyle O n O n displaystyle O n O n displaystyle O n Ispolzuetsya tolko v akademicheskih celyahGravitacionnaya sortirovka angl Bead sort Chisla predstavlyayutsya v vide businok na shtyryah zatem sortiruyutsya pod dejstviem gravitacii O n displaystyle O sqrt n O n displaystyle O sqrt n O n2 displaystyle O n 2 Trebuetsya specializirovannoe apparatnoe obespechenieAlgoritmy ne osnovyvayushiesya na sravneniyahBlochnaya sortirovka angl Bucket sort Elementy raspredelyayutsya po blokam soglasno diapazonu znachenij kazhdyj iz kotoryh zatem rekursivno sortiruetsya O n2 displaystyle O n 2 O n2 n k k displaystyle O n 2 n k k O n k displaystyle O n k k displaystyle k zaranee izvestnoe kolichestvo korzinPorazryadnaya sortirovka angl Radix sort Massiv sortiruetsya soglasno s pomoshyu porazryadnogo sravneniya chisel O wn displaystyle O wn O wn displaystyle O wn O n displaystyle O n w displaystyle w kolichestvo bit trebuemyh dlya hraneniya kazhdogo klyucha Sortirovka podschyotom angl Counting sort Podschityvaetsya kolichestvo vhozhdenij kazhdogo celogo chisla iz diapazona klyuchej v massiv Zatem vyvoditsya znacheniya vseh nenulevyh znachenij O n k displaystyle O n k O n k displaystyle O n k O n k displaystyle O n k k displaystyle k maksimalnoe znachenie elementov klyuchaSortirovka strokOdnim iz chastyh prilozhenij algoritmov sortirovki yavlyaetsya sortirovka strok Obobshyonnyj algoritm mozhet vyglyadet tak snachala mnozhestvo strok sortiruetsya po pervomu simvolu kazhdoj stroki zatem kazhdoe podmnozhestvo strok imeyushih odinakovyj pervyj simvol sortiruetsya po vtoromu simvolu i tak do teh por poka vse stroki ne budut uporyadocheny Pri etom otsutstvuyushij simvol pri sravnenii stroki dliny N so strokoj dliny N 1 schitaetsya menshe lyubogo simvola Primenenie dannogo metoda k strokam predstavlyayushim soboj chisla v estestvennoj zapisi vydayot kontrintuitivnye rezultaty naprimer 9 okazyvaetsya bolshe chem 11 tak kak pervyj simvol pervoj stroki imeet bo lshee znachenie chem pervyj simvol vtoroj Dlya ispravleniya etoj problemy algoritm sortirovki mozhet preobrazovyvat sortiruemye stroki v chisla i sortirovat ih kak chisla Takoj algoritm nazyvaetsya chislovoj sortirovkoj a opisannyj ranee strokovoj sortirovkoj Takzhe na praktike effektivnym sposobom resheniya problemy sortirovki strok soderzhashih chisla yavlyaetsya dobavlenie nekotorogo chisla nulej pered chislom takim obrazom 011 budet schitatsya bolshe 009 Sm takzheO bolshoe Vremennaya slozhnost algoritmaPrimechaniyaKnut 2007 s 416 Knut 2007 s 417 Knut 2007 s 417 418 Knut 2007 s 418 Knut 2007 s 419 Knut 2007 s 420 Knut 2007 s 420 421 Knut 2007 s 421 Knut 2007 s 422 Knut 2007 s 22 Knut 2007 s 23 Han Yijie Deterministic sorting in O n log log n time and linear space angl Journal of Algorithms Cognition Informatics and Logic 2004 T 50 1 S 96 105 doi 10 1016 j jalgor 2003 09 001 Arhivirovano 12 noyabrya 2020 goda Donald Knut 5 3 1 Sortirovka s minimalnym chislom sravnenij Iskusstvo programmirovaniya 2 e Vilyams 2002 Knut 2007 LiteraturaKnut D E Iskusstvo programmirovaniya Tom 3 Sortirovka i poisk The Art of Computer Programming Volume 3 Sorting and Searching pod red V T Tertyshnogo gl 5 i I V Krasikova gl 6 2 e izd Moskva Vilyams 2007 T 3 832 s ISBN 5 8459 0082 1 Tomas H Kormen Charlz I Lejzerson Ronald L Rivest Klifford Shtajn Algoritmy postroenie i analiz INTRODUCTION TO ALGORITHMS 2 e izd M 2006 S 1296 ISBN 5 8459 0857 4 Robert Sedzhvik Fundamentalnye algoritmy na C Analiz Struktury dannyh Sortirovka Poisk Algorithms in C Fundamentals Data Structures Sorting Searching SPb DiaSoftYuP 2003 S 672 ISBN 5 93772 081 4 Magnus Lie Hetland Python Algorithms Mastering Basic Algorithms in the Python Language Apress 2010 336 s ISBN 978 1 4302 3237 7 SsylkiImeetsya vikiuchebnik po teme Algoritmy sortirovki Teoriya zadachi testiruyushaya sistema Algoritmy sortirovki na algolist manual ru Animirovannoe sravnenie algoritmov sortirovki angl

