сортировка расческой c код

Как работает сортировка расчёской

Улучшаем пузырьковую сортировку.

Продолжаем рассказывать о разных видах алгоритмов сортировок. Мы уже разобрали самую простую пузырьковую сортировку и теперь улучшаем её — пишем сортировку расчёской.

Коротко про пузырьковую сортировку

Самый простой способ сортировки, который работает по такому принципу: берутся два элемента, сравниваются между собой и сразу меняются местами, если второй больше первого. Называется так потому, что это похоже на пузырьки воздуха в воде, которые всплывают наверх.

Если представить числа в виде столбиков, в зависимости от их размера, то пузырьковая сортировка будет выглядеть так:

сортировка расческой c код. orig 1. сортировка расческой c код фото. сортировка расческой c код-orig 1. картинка сортировка расческой c код. картинка orig 1. Улучшаем пузырьковую сортировку.

Чем плоха пузырьковая сортировка

Главный недостаток пузырьковой сортировки — её скорость и полный перебор всех элементов массива. Скорость работы алгоритма зависит не от количества сравнений (они выполняются быстро), а от количества перестановок (на них как раз и тратится много процессорного времени).

Получается, что если у нас в массиве в начале будет много больших элементов, которые нужно отправить в конец массива, то каждый раз нам придётся менять их местами с соседями, по одной перестановке за раз. Можно представить, что мы несем куда-то не слишком тяжёлый ящик, но после каждого шага ставим этот ящик на пол, потом поднимаем, делаем шаг, снова ставим, снова поднимаем. Процедуры простые, но из-за устройства алгоритма мы делаем эти процедуры слишком много раз.

В чём хитрость сортировки расчёской

Раз у нас большие элементы могут тормозить весь процесс, то можно их перекидывать не на соседнее место, а подальше. Так мы уменьшим количество перестановок, а с ними сэкономим и процессорное время, нужное на их обработку.

Но отправлять каждый большой элемент сразу в конец массива будет недальновидно — мы же не знаем, насколько этот элемент большой по сравнению с остальными элементами. Поэтому в сортировке расчёской сравниваются элементы, которые отстоят друг от друга на каком-то расстоянии. Оно не слишком большое, чтобы сильно не откидывать элементы и возвращать потом большинство назад, но и не слишком маленькое, чтобы можно было отправлять не на соседнее место, а чуть дальше.

👉 Опытным путём программисты установили оптимальное расстояние между элементами — это длина массива, поделённая на 1,247 (понятное дело, расстояние нужно округлить до целого числа). С этим числом алгоритм работает быстрее всего.

Как работает алгоритм сортировки расчёской

На первом шаге мы находим длину массива (например, 10 элементов) и делим её на 1,247. Допустим, после округления у нас получилось число 8. Теперь мы проходим первый цикл пузырьковой сортировки, только сравнивая не 1 и 2, 2 и 3, а сразу 1 и 8, 2 и 9, 3 и 10. Это отправит самые большие числа, если они есть в начале, в самый конец. Всего на первом шаге будет три сравнения.

На втором шаге мы берём число 8 из предыдущего этапа и снова делим его на 1,247, получая число 6. Теперь мы снова проходим весь массив и сравниваем так:

Уже получилось 5 перестановок и снова крупные числа улетели поближе к концу массива.

Так мы уменьшаем размер шага до тех пор, пока он не станет меньше единицы — к этому моменту массив будет полностью отсортирован.

🤔 Сортировка расчёской называется так из-за того, что мы как бы расчёсываем массив сначала широким гребнем (большой шаг), потом гребнем поменьше (шаг поменьше). В конце шаг равен единице, как в пузырьковой сортировке.

сортировка расческой c код. 1 XhyyRlu6FLAz7nq0tlYcw. сортировка расческой c код фото. сортировка расческой c код-1 XhyyRlu6FLAz7nq0tlYcw. картинка сортировка расческой c код. картинка 1 XhyyRlu6FLAz7nq0tlYcw. Улучшаем пузырьковую сортировку.

Сортировка расчёской на JavaScript

Запустите этот код в консоли браузера, чтобы посмотреть, как алгоритм шаг за шагом приводит массив в нормальный вид:

Почему это лучше пузырьковой сортировки, ведь алгоритм выглядит сложнее и в конце мы всё равно сравниваем соседние элементы?

То, что код выглядит сложнее, ничего не значит: нам нужна не оценка сложности кода, а скорость и эффективность работы.

Расчёска лучше пузырьковой сортировки, потому что в ней намного меньше операций перестановки. Именно перестановка занимает основное время процессора. В самом худшем случае алгоритм сортировки расчёской будет работать так же, как и пузырьковая, а в среднем — алгоритм работает быстрее пузырьковой.

Источник

Сортировка расчёской

Всем привет! Помогите, пожалуйста разобрать код.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

сортировка расческой c код. tick. сортировка расческой c код фото. сортировка расческой c код-tick. картинка сортировка расческой c код. картинка tick. Улучшаем пузырьковую сортировку.Сортировка расчёской и быстрая сортировка
В файле in.txt записана последовательность целых чисел. Заданными методами отсортировать числа и.

Сортировка «расческой»
ребят,помогите пожалуйста с сортировкой расческой. нужен пример алгоритма и блок-схема. на гугл не.

Комментарий модератора
сортировка расческой c код. mod. сортировка расческой c код фото. сортировка расческой c код-mod. картинка сортировка расческой c код. картинка mod. Улучшаем пузырьковую сортировку.Запрещено публиковать ответы на вопросы или решения задач с форума на другие сайты и давать на них ссылки в качестве ответа.
Вместе со ссылкой давайте короткое пояснение по сути того, что вы хотите донести пользователям форума.

Могу ли я в самом коде вместо вызова ф-ии cmp написать if (array[i + jump]> array[i]) и что я потеряю при такой замене?

Попытался написать программу целиком

The number of bytes in the array is 160
The number of bytes returned by getSize is 4

Объясните плз почему 4? Ф-ия считает размер в байтах адреса первого элемента массива?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Подсчет количества перестановок в сортировке расческой
Нужно подсчитать количество перестановок, сортируя массив «расческой» и вывести результат в.

Сортировка расческой
Добрый день Я новичок, пытаюсь разобраться с сортировкой расческой. Можете подсказать, корректен.

сортировка расческой c код. tick. сортировка расческой c код фото. сортировка расческой c код-tick. картинка сортировка расческой c код. картинка tick. Улучшаем пузырьковую сортировку.Сортировка расческой
День добрый, дорогие друзья. Нужна ваша помощь с реализацией сортировки «расческой» на языке.

Источник

О сортировках (пузырьковой, быстрой, расческой. )

Эта статья ориентирована в первую очередь на начинающих программистов. О сортировках вообще и об упомянутых в заголовке в интернете море статей, зачем нужно еще одна? Например, есть хорошая статья здесь, на хабре: Пузырьковая сортировка и все-все-все. Во-первых, хорошего много не бывает, во-вторых в этой статье я хочу ответь на вопросы «зачем, что, как, почему».Зачем нужны сортировки? В первую очередь, для поиска и представления данных. Некоторые задачи с неотсортированными данными решить очень трудно, а некоторые просто невозможно. Пример: орфографический словарь, в нем слова отсортированы по алфавиту. Если бы это было не так, то попробуйте найти в нем нужное слово. Телефонная книга, где абоненты отсортированы по алфавиту. Даже если сортировка не обязательна и не сильно нужна, все равно бывает удобнее работать с отсортированными данными.

Время сортировки 100001 элемента

Измерим время сортировки для массива, содержащего 100001 элемент на компьютере с процессором Intel i5 (3.3Ггц).Время указано в сек, через дробь указано количество проходов (для быстрой сортировки оно неизвестно).Как и ожидалось, шейкерная сортировка на проблемном массиве (который полностью упорядочен, только первый и последний элементы переставлены) абсолютный лидер. Она идеально «заточена» под эти данные. Но на случайных данных сортировки расческой и qsort не оставляют соперницам шанса. Пузырьковая сортировка на проблемном массиве показывает двукратное увеличение скорости по сравнению с случайным просто потому, что количество операций перестановки на порядки меньше.

СортировкаПростаяПузырьковаяШейкернаяРасчёскойБыстрая (qsort)
Стабильная+++
Случайный23.1/10000029.1/9958519.8/500740.020/490.055
Проблемный11.5/10000012.9/1000000.002/30.015/480.035
Обратный18.3/10000021.1/10000021.1/1000010.026/480.037

А теперь вернемся к истокам, к пузырьковой сортировке и воочию посмотрим на процесс сортировки. Видите, как на первом проходе тяжелый элемент (50) переносится в конец?
сортировка расческой c код. image loader. сортировка расческой c код фото. сортировка расческой c код-image loader. картинка сортировка расческой c код. картинка image loader. Улучшаем пузырьковую сортировку.
Сравниваемые элементы показаны в зеленых рамках, а переставленные — в красных

Дополнение после публикации

Я ни коей мере не считаю qsort плохой или медленной — она достаточно быстра, функциональна и при возможности следует пользоваться именно ею. Да, ей приходится тратить время на вызов функции сравнения и она уступила «расческе», которая сравнивает «по месту». Это отставание несущественно (сравните с отставанием пузырька от qsort, которое будет увеличиваться при росте массива). Пусть теперь надо сравнивать не числа, а какую-то сложную структуру по определенному полю и пусть эта структура состоит из 1000 байтов. Поместим 100тыс элементов в массив (100мб — это кое-что) и вызовем qsort. Функция fcomp (функция-компаратор) сравнит нужные поля и в результате получится отсортированный массив. При этом при перестановке элементов qsort придется 3 раза копировать фрагменты по 1000 байтов. А теперь «маленькая хитрость» — создадим массив из 100тыс ссылок на исходные элементы и передадим в qsort начало этого массива ссылок. Поскольку ссылка занимает 4 байта (в 64 битных 8), а не 1000, то при обмене ссылок qsort надо поменять эти 4/8 байтов. Разумеется, нужно будет изменить fcomp, поскольку в качестве параметров она теперь получит не адреса элементов, а адреса адресов элементов (но это несложное изменение). Зато теперь можно сделать несколько функций сортировки (каждая сортирует по своему полю структуры). И даже, при необходимости, можно сделать несколько массивов ссылок. Вот сколько возможностей дает qsort!

Кстати: использование ссылок на объекты вместо самих объектов может быть полезно не только при вызове qsort, но и при применении таких контейнеров как vector, set или map.

Источник

Описание алгоритмов сортировки и сравнение их производительности

Вступление

На эту тему написано уже немало статей. Однако я еще не видел статьи, в которой сравниваются все основные сортировки на большом числе тестов разного типа и размера. Кроме того, далеко не везде выложены реализации и описание набора тестов. Это приводит к тому, что могут возникнуть сомнения в правильности исследования. Однако цель моей работы состоит не только в том, чтобы определить, какие сортировки работают быстрее всего (в целом это и так известно). В первую очередь мне было интересно исследовать алгоритмы, оптимизировать их, чтобы они работали как можно быстрее. Работая над этим, мне удалось придумать эффективную формулу для сортировки Шелла.

Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.

Описание основных сортировок и их реализация

Я постараюсь кратко и понятно описать сортировки и указать асимптотику, хотя последнее в рамках данной статьи не очень важно (интересно же узнать реальное время работы). О потреблении памяти в дальнейшем ничего писать не буду, замечу только, что сортировки, использующие непростые структуры данных (как, например, сортировка деревом), обычно потребляют ее в больших количествах, а остальные сортировки в худшем случае только создают вспомогательный массив. Также существует понятие стабильности (устойчивости) сортировки. Это значит, что относительный порядок элементов при их равенстве не меняется. Это тоже в рамках данной статьи неважно (в конце концов, можно просто прицепить к элементу его индекс), однако в одном месте пригодится.

Сортировка пузырьком / Bubble sort

Будем идти по массиву слева направо. Если текущий элемент больше следующего, меняем их местами. Делаем так, пока массив не будет отсортирован. Заметим, что после первой итерации самый большой элемент будет находиться в конце массива, на правильном месте. После двух итераций на правильном месте будут стоять два наибольших элемента, и так далее. Очевидно, не более чем после n итераций массив будет отсортирован. Таким образом, асимптотика в худшем и среднем случае – O(n 2 ), в лучшем случае – O(n).

Шейкерная сортировка / Shaker sort

(также известна как сортировка перемешиванием и коктейльная сортировка). Заметим, что сортировка пузырьком работает медленно на тестах, в которых маленькие элементы стоят в конце (их еще называют «черепахами»). Такой элемент на каждом шаге алгоритма будет сдвигаться всего на одну позицию влево. Поэтому будем идти не только слева направо, но и справа налево. Будем поддерживать два указателя begin и end, обозначающих, какой отрезок массива еще не отсортирован. На очередной итерации при достижении end вычитаем из него единицу и движемся справа налево, аналогично, при достижении begin прибавляем единицу и двигаемся слева направо. Асимптотика у алгоритма такая же, как и у сортировки пузырьком, однако реальное время работы лучше.

Сортировка расческой / Comb sort

Еще одна модификация сортировки пузырьком. Для того, чтобы избавиться от «черепах», будем переставлять элементы, стоящие на расстоянии. Зафиксируем его и будем идти слева направо, сравнивая элементы, стоящие на этом расстоянии, переставляя их, если необходимо. Очевидно, это позволит «черепахам» быстро добраться в начало массива. Оптимально изначально взять расстояние равным длине массива, а далее делить его на некоторый коэффициент, равный примерно 1.247. Когда расстояние станет равно единице, выполняется сортировка пузырьком. В лучшем случае асимптотика равна O(nlogn), в худшем – O(n 2 ). Какая асимптотика в среднем мне не очень понятно, на практике похоже на O(nlogn).

Об этих сортировках (пузырьком, шейкерной и расческой) также можно почитать здесь.

Сортировка вставками / Insertion sort

Создадим массив, в котором после завершения алгоритма будет лежать ответ. Будем поочередно вставлять элементы из исходного массива так, чтобы элементы в массиве-ответе всегда были отсортированы. Асимптотика в среднем и худшем случае – O(n 2 ), в лучшем – O(n). Реализовывать алгоритм удобнее по-другому (создавать новый массив и реально что-то вставлять в него относительно сложно): просто сделаем так, чтобы отсортирован был некоторый префикс исходного массива, вместо вставки будем менять текущий элемент с предыдущим, пока они стоят в неправильном порядке.

Сортировка Шелла / Shellsort

Несколько полезных ссылок:

Сортировка деревом / Tree sort

Будем вставлять элементы в двоичное дерево поиска. После того, как все элементы вставлены достаточно обойти дерево в глубину и получить отсортированный массив. Если использовать сбалансированное дерево, например красно-черное, асимптотика будет равна O(nlogn) в худшем, среднем и лучшем случае. В реализации использован контейнер multiset.

Здесь можно почитать про деревья поиска:

Гномья сортировка / Gnome sort

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

Сортировка выбором / Selection sort

На очередной итерации будем находить минимум в массиве после текущего элемента и менять его с ним, если надо. Таким образом, после i-ой итерации первые i элементов будут стоять на своих местах. Асимптотика: O(n 2 ) в лучшем, среднем и худшем случае. Нужно отметить, что эту сортировку можно реализовать двумя способами – сохраняя минимум и его индекс или просто переставляя текущий элемент с рассматриваемым, если они стоят в неправильном порядке. Первый способ оказался немного быстрее, поэтому он и реализован.

Пирамидальная сортировка / Heapsort

Развитие идеи сортировки выбором. Воспользуемся структурой данных «куча» (или «пирамида», откуда и название алгоритма). Она позволяет получать минимум за O(1), добавляя элементы и извлекая минимум за O(logn). Таким образом, асимптотика O(nlogn) в худшем, среднем и лучшем случае. Реализовывал кучу я сам, хотя в С++ и есть контейнер priority_queue, поскольку этот контейнер довольно медленный.

Почитать про кучу можно здесь:

Быстрая сортировка / Quicksort

Выберем некоторый опорный элемент. После этого перекинем все элементы, меньшие его, налево, а большие – направо. Рекурсивно вызовемся от каждой из частей. В итоге получим отсортированный массив, так как каждый элемент меньше опорного стоял раньше каждого большего опорного. Асимптотика: O(nlogn) в среднем и лучшем случае, O(n 2 ). Наихудшая оценка достигается при неудачном выборе опорного элемента. Моя реализация этого алгоритма совершенно стандартна, идем одновременно слева и справа, находим пару элементов, таких, что левый элемент больше опорного, а правый меньше, и меняем их местами. Помимо чистой быстрой сортировки, участвовала в сравнении и сортировка, переходящая при малом количестве элементов на сортировку вставками. Константа подобрана тестированием, а сортировка вставками — наилучшая сортировка, подходящая для этой задачи (хотя не стоит из-за этого думать, что она самая быстрая из квадратичных).

Сортировка слиянием / Merge sort

Сортировка, основанная на парадигме «разделяй и властвуй». Разделим массив пополам, рекурсивно отсортируем части, после чего выполним процедуру слияния: поддерживаем два указателя, один на текущий элемент первой части, второй – на текущий элемент второй части. Из этих двух элементов выбираем минимальный, вставляем в ответ и сдвигаем указатель, соответствующий минимуму. Слияние работает за O(n), уровней всего logn, поэтому асимптотика O(nlogn). Эффективно заранее создать временный массив и передать его в качестве аргумента функции. Эта сортировка рекурсивна, как и быстрая, а потому возможен переход на квадратичную при небольшом числе элементов.

Сортировка подсчетом / Counting sort

Создадим массив размера r – l, где l – минимальный, а r – максимальный элемент массива. После этого пройдем по массиву и подсчитаем количество вхождений каждого элемента. Теперь можно пройти по массиву значений и выписать каждое число столько раз, сколько нужно. Асимптотика – O(n + r — l). Можно модифицировать этот алгоритм, чтобы он стал стабильным: для этого определим место, где должно стоять очередное число (это просто префиксные суммы в массиве значений) и будем идти по исходному массиву слева направо, ставя элемент на правильное место и увеличивая позицию на 1. Эта сортировка не тестировалась, поскольку большинство тестов содержало достаточно большие числа, не позволяющие создать массив требуемого размера. Однако она, тем не менее, пригодилась.

Блочная сортировка / Bucket sort

(также известна как корзинная и карманная сортировка). Пусть l – минимальный, а r – максимальный элемент массива. Разобьем элементы на блоки, в первом будут элементы от l до l + k, во втором – от l + k до l + 2k и т.д., где k = (r – l) / количество блоков. В общем-то, если количество блоков равно двум, то данный алгоритм превращается в разновидность быстрой сортировки. Асимптотика этого алгоритма неясна, время работы зависит и от входных данных, и от количества блоков. Утверждается, что на удачных данных время работы линейно. Реализация этого алгоритма оказалась одной из самых трудных задач. Можно сделать это так: просто создавать новые массивы, рекурсивно их сортировать и склеивать. Однако такой подход все же довольно медленный и меня не устроил. В эффективной реализации используется несколько идей:

1) Не будем создавать новых массивов. Для этого воспользуемся техникой сортировки подсчетом – подсчитаем количество элементов в каждом блоке, префиксные суммы и, таким образом, позицию каждого элемента в массиве.

2) Не будем запускаться из пустых блоков. Занесем индексы непустых блоков в отдельный массив и запустимся только от них.

3) Проверим, отсортирован ли массив. Это не ухудшит время работы, так как все равно нужно сделать проход с целью нахождения минимума и максимума, однако позволит алгоритму ускориться на частично отсортированных данных, ведь элементы вставляются в новые блоки в том же порядке, что и в исходном массиве.

4) Поскольку алгоритм получился довольно громоздким, при небольшом количестве элементов он крайне неэффективен. До такой степени, что переход на сортировку вставками ускоряет работу примерно в 10 раз.

Поразрядная сортировка / Radix sort

(также известна как цифровая сортировка). Существует две версии этой сортировки, в которых, на мой взгляд, мало общего, кроме идеи воспользоваться представлением числа в какой-либо системе счисления (например, двоичной).

LSD (least significant digit):

Представим каждое число в двоичном виде. На каждом шаге алгоритма будем сортировать числа таким образом, чтобы они были отсортированы по первым k * i битам, где k – некоторая константа. Из данного определения следует, что на каждом шаге достаточно стабильно сортировать элементы по новым k битам. Для этого идеально подходит сортировка подсчетом (необходимо 2 k памяти и времени, что немного при удачном выборе константы). Асимптотика: O(n), если считать, что числа фиксированного размера (а в противном случае нельзя было бы считать, что сравнение двух чисел выполняется за единицу времени). Реализация довольно проста.

MSD (most significant digit):

На самом деле, некоторая разновидность блочной сортировки. В один блок будут попадать числа с равными k битами. Асимптотика такая же, как и у LSD версии. Реализация очень похожа на блочную сортировку, но проще. В ней используется функция digit, определенная в реализации LSD версии.

Битонная сортировка / Bitonic sort:

Идея данного алгоритма заключается в том, что исходный массив преобразуется в битонную последовательность – последовательность, которая сначала возрастает, а потом убывает. Ее можно эффективно отсортировать следующим образом: разобьем массив на две части, создадим два массива, в первый добавим все элементы, равные минимуму из соответственных элементов каждой из двух частей, а во второй – равные максимуму. Утверждается, что получатся две битонные последовательности, каждую из которых можно рекурсивно отсортировать тем же образом, после чего можно склеить два массива (так как любой элемент первого меньше или равен любого элемента второго). Для того, чтобы преобразовать исходный массив в битонную последовательность, сделаем следующее: если массив состоит из двух элементов, можно просто завершиться, иначе разделим массив пополам, рекурсивно вызовем от половинок алгоритм, после чего отсортируем первую часть по порядку, вторую в обратном порядке и склеим. Очевидно, получится битонная последовательность. Асимптотика: O(nlog 2 n), поскольку при построении битонной последовательности мы использовали сортировку, работающую за O(nlogn), а всего уровней было logn. Также заметим, что размер массива должен быть равен степени двойки, так что, возможно, придется его дополнять фиктивными элементами (что не влияет на асимптотику).

Timsort

Гибридная сортировка, совмещающая сортировку вставками и сортировку слиянием. Разобьем элементы массива на несколько подмассивов небольшого размера, при этом будем расширять подмассив, пока элементы в нем отсортированы. Отсортируем подмассивы сортировкой вставками, пользуясь тем, что она эффективно работает на отсортированных массивах. Далее будем сливать подмассивы как в сортировке слиянием, беря их примерно равного размера (иначе время работы приблизится к квадратичному). Для этого удобного хранить подмассивы в стеке, поддерживая инвариант — чем дальше от вершины, тем больше размер, и сливать подмассивы на верхушке только тогда, когда размер третьего по отдаленности от вершины подмассива больше или равен сумме их размеров. Асимптотика: O(n) в лучшем случае и O(nlogn) в среднем и худшем случае. Реализация нетривиальна, твердой уверенности в ней у меня нет, однако время работы она показала довольно неплохое и согласующееся с моими представлениями о том, как должна работать эта сортировка.

Подробнее timsort описан здесь:

Тестирование

Железо и система

Процессор: Intel Core i7-3770 CPU 3.40 GHz
ОЗУ: 8 ГБ
Тестирование проводилось на почти чистой системе Windows 10 x64, установленной за несколько дней до запуска. Использованная IDE – Microsoft Visual Studio 2015.

Тесты

Размер входных данных

Как проводилось тестирование

На каждом тесте было производилось 20 запусков, итоговое время работы – среднее по получившимся значениям. Почти все результаты были получены после одного запуска программы, однако из-за нескольких ошибок в коде и системных глюков (все же тестирование продолжалось почти неделю чистого времени) некоторые сортировки и тесты пришлось впоследствии перетестировать.

Тонкости реализации

Возможно, кого-то удивит, что в реализации самого процесса тестирования я не использовал указатели на функции, что сильно сократило бы код. Оказалось, что это заметно замедляет работу алгоритма (примерно на 5-10%). Поэтому я использовал отдельный вызов каждой функции (это, конечно, не отразилось бы на относительной скорости, но… все же хочется улучшить и абсолютную). По той же причине были заменены векторы на обычные массивы, не были использованы шаблоны и функции-компараторы. Все это более актуально для промышленного использования алгоритма, нежели его тестирования.

Результаты

Все результаты доступны в нескольких видах – три диаграммы (гистограмма, на которой видно изменение скорости при переходе к следующему ограничению на одном типе тестов, график, изображающий то же самое, но иногда более наглядно, и гистограмма, на которой видно, какая сортировка лучше всего работает на каком-то типе тестов) и таблицы, на которых они основаны. Третья группа была разделена еще на три части, а то мало что было бы понятно. Впрочем, и так далеко не все диаграммы удачны (в полезности третьего типа диаграмм я вообще сильно сомневаюсь), но, надеюсь, каждый сможет найти наиболее подходящую для понимания.

Поскольку картинок очень много, они скрыты спойлерами. Немного комментариев по поводу обозначений. Сортировки названы так, как выше, если это сортировка Шелла, то в скобочках указан автор последовательности, к названиям сортировок, переходящих на сортировку вставками, приписано Ins (для компактности). В диаграммах у второй группы тестов обозначена возможная длина отсортированных подмассивов, у третьей группы — количество свопов, у четвертой — количество замен. Общий результат рассчитывался как среднее по четырем группам.

Первая группа сортировок

Массив случайных чисел

сортировка расческой c код. 22bf0fe6a6d74bf8878ef842f6634f4a. сортировка расческой c код фото. сортировка расческой c код-22bf0fe6a6d74bf8878ef842f6634f4a. картинка сортировка расческой c код. картинка 22bf0fe6a6d74bf8878ef842f6634f4a. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 536add6664024e90bb142695d324e64f. сортировка расческой c код фото. сортировка расческой c код-536add6664024e90bb142695d324e64f. картинка сортировка расческой c код. картинка 536add6664024e90bb142695d324e64f. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c8d9b1c590064ef8a5daca5fac24ca3a. сортировка расческой c код фото. сортировка расческой c код-c8d9b1c590064ef8a5daca5fac24ca3a. картинка сортировка расческой c код. картинка c8d9b1c590064ef8a5daca5fac24ca3a. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 18305bd88637498c90c71c8c3a14e2f3. сортировка расческой c код фото. сортировка расческой c код-18305bd88637498c90c71c8c3a14e2f3. картинка сортировка расческой c код. картинка 18305bd88637498c90c71c8c3a14e2f3. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 094bcb36cf334bc980c51856c9bf2a71. сортировка расческой c код фото. сортировка расческой c код-094bcb36cf334bc980c51856c9bf2a71. картинка сортировка расческой c код. картинка 094bcb36cf334bc980c51856c9bf2a71. Улучшаем пузырьковую сортировку.

Совсем скучные результаты, даже частичная отсортированность при небольшом модуле почти незаметна.

Частично отсортированный массив

сортировка расческой c код. d5249af5913a46218f23c87bd95b52cb. сортировка расческой c код фото. сортировка расческой c код-d5249af5913a46218f23c87bd95b52cb. картинка сортировка расческой c код. картинка d5249af5913a46218f23c87bd95b52cb. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 44da39b84f39492382980a9e99d2aa7f. сортировка расческой c код фото. сортировка расческой c код-44da39b84f39492382980a9e99d2aa7f. картинка сортировка расческой c код. картинка 44da39b84f39492382980a9e99d2aa7f. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 880d27248b4346ca8569cc031b3af69c. сортировка расческой c код фото. сортировка расческой c код-880d27248b4346ca8569cc031b3af69c. картинка сортировка расческой c код. картинка 880d27248b4346ca8569cc031b3af69c. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 5c773cedb39240bd8bf88ec53d145ef4. сортировка расческой c код фото. сортировка расческой c код-5c773cedb39240bd8bf88ec53d145ef4. картинка сортировка расческой c код. картинка 5c773cedb39240bd8bf88ec53d145ef4. Улучшаем пузырьковую сортировку.сортировка расческой c код. 2ff35a52cd91444298a0f7e018549a0e. сортировка расческой c код фото. сортировка расческой c код-2ff35a52cd91444298a0f7e018549a0e. картинка сортировка расческой c код. картинка 2ff35a52cd91444298a0f7e018549a0e. Улучшаем пузырьковую сортировку.

Уже гораздо интереснее. Обменные сортировки наиболее бурно отреагировали, шейкерная даже обогнала гномью. Сортировка вставками ускорилась только под самый конец. Сортировка выбором, конечно, работает совершенно также.

Свопы

сортировка расческой c код. a2b6ae2302194fa49d0ba86c330e3aca. сортировка расческой c код фото. сортировка расческой c код-a2b6ae2302194fa49d0ba86c330e3aca. картинка сортировка расческой c код. картинка a2b6ae2302194fa49d0ba86c330e3aca. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 677990c3abbb481ba8af62aaebb7adb5. сортировка расческой c код фото. сортировка расческой c код-677990c3abbb481ba8af62aaebb7adb5. картинка сортировка расческой c код. картинка 677990c3abbb481ba8af62aaebb7adb5. Улучшаем пузырьковую сортировку.
сортировка расческой c код. a30a8e60c0504706b83a0e5823234bb1. сортировка расческой c код фото. сортировка расческой c код-a30a8e60c0504706b83a0e5823234bb1. картинка сортировка расческой c код. картинка a30a8e60c0504706b83a0e5823234bb1. Улучшаем пузырьковую сортировку.
сортировка расческой c код. fda1f044c49e42d79a101656ca3ba26c. сортировка расческой c код фото. сортировка расческой c код-fda1f044c49e42d79a101656ca3ba26c. картинка сортировка расческой c код. картинка fda1f044c49e42d79a101656ca3ba26c. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 24bef96ba82b4e938da5ab48e8ba5b7c. сортировка расческой c код фото. сортировка расческой c код-24bef96ba82b4e938da5ab48e8ba5b7c. картинка сортировка расческой c код. картинка 24bef96ba82b4e938da5ab48e8ba5b7c. Улучшаем пузырьковую сортировку.

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

Изменения в перестановке

сортировка расческой c код. 8b817c67ad024ed4858c4aa0d139cb66. сортировка расческой c код фото. сортировка расческой c код-8b817c67ad024ed4858c4aa0d139cb66. картинка сортировка расческой c код. картинка 8b817c67ad024ed4858c4aa0d139cb66. Улучшаем пузырьковую сортировку.
сортировка расческой c код. fa8daf06dd8448fa9c31e2fc1230bbf8. сортировка расческой c код фото. сортировка расческой c код-fa8daf06dd8448fa9c31e2fc1230bbf8. картинка сортировка расческой c код. картинка fa8daf06dd8448fa9c31e2fc1230bbf8. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 8375da2da63a4b4aa017cbcf76bfc235. сортировка расческой c код фото. сортировка расческой c код-8375da2da63a4b4aa017cbcf76bfc235. картинка сортировка расческой c код. картинка 8375da2da63a4b4aa017cbcf76bfc235. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c8279395a3cf4a6e92495afd5c19c500. сортировка расческой c код фото. сортировка расческой c код-c8279395a3cf4a6e92495afd5c19c500. картинка сортировка расческой c код. картинка c8279395a3cf4a6e92495afd5c19c500. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 2d14b92733be440293f4a78da34187ee. сортировка расческой c код фото. сортировка расческой c код-2d14b92733be440293f4a78da34187ee. картинка сортировка расческой c код. картинка 2d14b92733be440293f4a78da34187ee. Улучшаем пузырьковую сортировку.

Группа почти ничем не отличается от предыдущей, поэтому результаты похожи. Однако сортировка пузырьком вырывается вперед, так как случайный элемент, вставленный в массив, скорее всего будет больше всех остальных, то есть за одну итерацию переместится в конец. Сортировка выбором стала аутсайдером.

Повторы

сортировка расческой c код. 49447e5c7009426b9d994424b9bb8508. сортировка расческой c код фото. сортировка расческой c код-49447e5c7009426b9d994424b9bb8508. картинка сортировка расческой c код. картинка 49447e5c7009426b9d994424b9bb8508. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 4eac5a22ef7b48808054276ccc9e012b. сортировка расческой c код фото. сортировка расческой c код-4eac5a22ef7b48808054276ccc9e012b. картинка сортировка расческой c код. картинка 4eac5a22ef7b48808054276ccc9e012b. Улучшаем пузырьковую сортировку.
сортировка расческой c код. f8bf3fcf7ef447a880952761c31ba10f. сортировка расческой c код фото. сортировка расческой c код-f8bf3fcf7ef447a880952761c31ba10f. картинка сортировка расческой c код. картинка f8bf3fcf7ef447a880952761c31ba10f. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 76ad1e91c29340a8ae8642559208f08f. сортировка расческой c код фото. сортировка расческой c код-76ad1e91c29340a8ae8642559208f08f. картинка сортировка расческой c код. картинка 76ad1e91c29340a8ae8642559208f08f. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 8d1c9e73a86b4929b531cd9b98849c84. сортировка расческой c код фото. сортировка расческой c код-8d1c9e73a86b4929b531cd9b98849c84. картинка сортировка расческой c код. картинка 8d1c9e73a86b4929b531cd9b98849c84. Улучшаем пузырьковую сортировку.

Здесь все сортировки (кроме, конечно, сортировки выбором) работали почти одинаково, ускоряясь по мере увеличении количества повторов.

Итоговые результаты

сортировка расческой c код. 2266872abe8847eca4f2d4ff5b1ca445. сортировка расческой c код фото. сортировка расческой c код-2266872abe8847eca4f2d4ff5b1ca445. картинка сортировка расческой c код. картинка 2266872abe8847eca4f2d4ff5b1ca445. Улучшаем пузырьковую сортировку.

За счет своего абсолютного безразличия к массиву, сортировка выбором, работавшая быстрее всех на случайных данных, все же проиграла сортировке вставками. Гномья сортировка оказалась заметно хуже последней, из-за чего ее практическое применение сомнительно. Шейкерная и пузырьковая сортировки оказались медленнее всех.

Вторая группа сортировок

Массив случайных чисел

сортировка расческой c код. 7e52833ffd374b80bc9a64b3d3123c73. сортировка расческой c код фото. сортировка расческой c код-7e52833ffd374b80bc9a64b3d3123c73. картинка сортировка расческой c код. картинка 7e52833ffd374b80bc9a64b3d3123c73. Улучшаем пузырьковую сортировку.
сортировка расческой c код. add84c3c2d3749078fd89e0ba73781e7. сортировка расческой c код фото. сортировка расческой c код-add84c3c2d3749078fd89e0ba73781e7. картинка сортировка расческой c код. картинка add84c3c2d3749078fd89e0ba73781e7. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 62156f0a215d4d0a8f863fa99d65ee83. сортировка расческой c код фото. сортировка расческой c код-62156f0a215d4d0a8f863fa99d65ee83. картинка сортировка расческой c код. картинка 62156f0a215d4d0a8f863fa99d65ee83. Улучшаем пузырьковую сортировку.
сортировка расческой c код. e1894cac8e4a457aaefc5f2b39f5dcb7. сортировка расческой c код фото. сортировка расческой c код-e1894cac8e4a457aaefc5f2b39f5dcb7. картинка сортировка расческой c код. картинка e1894cac8e4a457aaefc5f2b39f5dcb7. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 2038b249fba847cc8c03307658937813. сортировка расческой c код фото. сортировка расческой c код-2038b249fba847cc8c03307658937813. картинка сортировка расческой c код. картинка 2038b249fba847cc8c03307658937813. Улучшаем пузырьковую сортировку.

Сортировка Шелла с последовательностью Пратта ведет себя совсем странно, остальные более менее ясно. Сортировка деревом любит частично отсортированные массивы, но не любит повторов, возможно, поэтому самое худшее время работы именно посередине.

сортировка расческой c код. b29e5434a5bf40b6a4c8d5532463b3a5. сортировка расческой c код фото. сортировка расческой c код-b29e5434a5bf40b6a4c8d5532463b3a5. картинка сортировка расческой c код. картинка b29e5434a5bf40b6a4c8d5532463b3a5. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 75d41bc812c94f95aa2857e2890f6835. сортировка расческой c код фото. сортировка расческой c код-75d41bc812c94f95aa2857e2890f6835. картинка сортировка расческой c код. картинка 75d41bc812c94f95aa2857e2890f6835. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 26843039f37647779fa85186dde1adc1. сортировка расческой c код фото. сортировка расческой c код-26843039f37647779fa85186dde1adc1. картинка сортировка расческой c код. картинка 26843039f37647779fa85186dde1adc1. Улучшаем пузырьковую сортировку.
сортировка расческой c код. ff5dcd2a43d4468e8006387426f5b6ad. сортировка расческой c код фото. сортировка расческой c код-ff5dcd2a43d4468e8006387426f5b6ad. картинка сортировка расческой c код. картинка ff5dcd2a43d4468e8006387426f5b6ad. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 0b27d6bbf49545dfbb25668f2d2a4fe5. сортировка расческой c код фото. сортировка расческой c код-0b27d6bbf49545dfbb25668f2d2a4fe5. картинка сортировка расческой c код. картинка 0b27d6bbf49545dfbb25668f2d2a4fe5. Улучшаем пузырьковую сортировку.

Все как прежде, только Шелл с Праттом усилился на второй группе из-за отсортированности. Также становится заметным влияние асимптотики — сортировка деревом оказывается на втором месте, в отличие от группы с меньшим числом элементов.

Частично отсортированный массив

сортировка расческой c код. ba705f1ad30246cc9edc4d7124f35cd2. сортировка расческой c код фото. сортировка расческой c код-ba705f1ad30246cc9edc4d7124f35cd2. картинка сортировка расческой c код. картинка ba705f1ad30246cc9edc4d7124f35cd2. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 8de69ec0b5714087a3cef445489fe5af. сортировка расческой c код фото. сортировка расческой c код-8de69ec0b5714087a3cef445489fe5af. картинка сортировка расческой c код. картинка 8de69ec0b5714087a3cef445489fe5af. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 89310a9604c349349e25b666bf506bae. сортировка расческой c код фото. сортировка расческой c код-89310a9604c349349e25b666bf506bae. картинка сортировка расческой c код. картинка 89310a9604c349349e25b666bf506bae. Улучшаем пузырьковую сортировку.
сортировка расческой c код. bfc3c599d7bb46c1992b7609344c9206. сортировка расческой c код фото. сортировка расческой c код-bfc3c599d7bb46c1992b7609344c9206. картинка сортировка расческой c код. картинка bfc3c599d7bb46c1992b7609344c9206. Улучшаем пузырьковую сортировку.сортировка расческой c код. 54bd5a6781f54d0f981ff8a788080748. сортировка расческой c код фото. сортировка расческой c код-54bd5a6781f54d0f981ff8a788080748. картинка сортировка расческой c код. картинка 54bd5a6781f54d0f981ff8a788080748. Улучшаем пузырьковую сортировку.

Здесь понятным образом ведут себя все сортировки, кроме Шелла с Хиббардом, который почему-то не сразу начинает ускоряться.

сортировка расческой c код. 413230810b8a4e6ead6428b296eab9e4. сортировка расческой c код фото. сортировка расческой c код-413230810b8a4e6ead6428b296eab9e4. картинка сортировка расческой c код. картинка 413230810b8a4e6ead6428b296eab9e4. Улучшаем пузырьковую сортировку.
сортировка расческой c код. e220423e08cd4e9eabc00893b1e67080. сортировка расческой c код фото. сортировка расческой c код-e220423e08cd4e9eabc00893b1e67080. картинка сортировка расческой c код. картинка e220423e08cd4e9eabc00893b1e67080. Улучшаем пузырьковую сортировку.
сортировка расческой c код. af153be3d3c144dcb1d53816de6492b5. сортировка расческой c код фото. сортировка расческой c код-af153be3d3c144dcb1d53816de6492b5. картинка сортировка расческой c код. картинка af153be3d3c144dcb1d53816de6492b5. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 71549e21b5a64e8f8c5360568c112a67. сортировка расческой c код фото. сортировка расческой c код-71549e21b5a64e8f8c5360568c112a67. картинка сортировка расческой c код. картинка 71549e21b5a64e8f8c5360568c112a67. Улучшаем пузырьковую сортировку.
сортировка расческой c код. cb174bb19c744da6a9dee1197b4471e1. сортировка расческой c код фото. сортировка расческой c код-cb174bb19c744da6a9dee1197b4471e1. картинка сортировка расческой c код. картинка cb174bb19c744da6a9dee1197b4471e1. Улучшаем пузырьковую сортировку.

Здесь все, в общем, как и прежде. Даже асимптотика сортировки деревом не помогла ей вырваться с последнего места.

Свопы

сортировка расческой c код. 92642db1fa5d48418948d5ea4af28f31. сортировка расческой c код фото. сортировка расческой c код-92642db1fa5d48418948d5ea4af28f31. картинка сортировка расческой c код. картинка 92642db1fa5d48418948d5ea4af28f31. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c228b4651a9547c683385df6d851b366. сортировка расческой c код фото. сортировка расческой c код-c228b4651a9547c683385df6d851b366. картинка сортировка расческой c код. картинка c228b4651a9547c683385df6d851b366. Улучшаем пузырьковую сортировку.
сортировка расческой c код. de9a1130fa4547db9429faf0b5e7428a. сортировка расческой c код фото. сортировка расческой c код-de9a1130fa4547db9429faf0b5e7428a. картинка сортировка расческой c код. картинка de9a1130fa4547db9429faf0b5e7428a. Улучшаем пузырьковую сортировку.
сортировка расческой c код. bc509acb6cba48fa8bc8467507d58ee8. сортировка расческой c код фото. сортировка расческой c код-bc509acb6cba48fa8bc8467507d58ee8. картинка сортировка расческой c код. картинка bc509acb6cba48fa8bc8467507d58ee8. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 426c0a9666a34911b91d47d1383eff7e. сортировка расческой c код фото. сортировка расческой c код-426c0a9666a34911b91d47d1383eff7e. картинка сортировка расческой c код. картинка 426c0a9666a34911b91d47d1383eff7e. Улучшаем пузырьковую сортировку.

сортировка расческой c код. ff8486b151654cde90d2308dfc986373. сортировка расческой c код фото. сортировка расческой c код-ff8486b151654cde90d2308dfc986373. картинка сортировка расческой c код. картинка ff8486b151654cde90d2308dfc986373. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 37e1bacee1cd458996c651e581aeb7a5. сортировка расческой c код фото. сортировка расческой c код-37e1bacee1cd458996c651e581aeb7a5. картинка сортировка расческой c код. картинка 37e1bacee1cd458996c651e581aeb7a5. Улучшаем пузырьковую сортировку.
сортировка расческой c код. e8f1ce4429f443bfb22a8348a114b07a. сортировка расческой c код фото. сортировка расческой c код-e8f1ce4429f443bfb22a8348a114b07a. картинка сортировка расческой c код. картинка e8f1ce4429f443bfb22a8348a114b07a. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 9b87d3a3198541cda5b55532779cede7. сортировка расческой c код фото. сортировка расческой c код-9b87d3a3198541cda5b55532779cede7. картинка сортировка расческой c код. картинка 9b87d3a3198541cda5b55532779cede7. Улучшаем пузырьковую сортировку.
сортировка расческой c код. b284ab54164d400582354e72d738e826. сортировка расческой c код фото. сортировка расческой c код-b284ab54164d400582354e72d738e826. картинка сортировка расческой c код. картинка b284ab54164d400582354e72d738e826. Улучшаем пузырьковую сортировку.

Здесь заметно, что у сортировок Шелла большая зависимость от частичной отсортированности, так как они ведут себя практически линейно, а остальные две только сильно падают на последних группах.

Изменения в перестановке

сортировка расческой c код. 08f693ef75274eb49bcaebe7eddfef18. сортировка расческой c код фото. сортировка расческой c код-08f693ef75274eb49bcaebe7eddfef18. картинка сортировка расческой c код. картинка 08f693ef75274eb49bcaebe7eddfef18. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c215bdc857ae42f49b668975cbaae0e9. сортировка расческой c код фото. сортировка расческой c код-c215bdc857ae42f49b668975cbaae0e9. картинка сортировка расческой c код. картинка c215bdc857ae42f49b668975cbaae0e9. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 0f349117de264c38add27b53d760c690. сортировка расческой c код фото. сортировка расческой c код-0f349117de264c38add27b53d760c690. картинка сортировка расческой c код. картинка 0f349117de264c38add27b53d760c690. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 9e9d21e715be41d4b8611d02e5cc0f42. сортировка расческой c код фото. сортировка расческой c код-9e9d21e715be41d4b8611d02e5cc0f42. картинка сортировка расческой c код. картинка 9e9d21e715be41d4b8611d02e5cc0f42. Улучшаем пузырьковую сортировку.
сортировка расческой c код. a70173abfeb04de8a3481723c7256576. сортировка расческой c код фото. сортировка расческой c код-a70173abfeb04de8a3481723c7256576. картинка сортировка расческой c код. картинка a70173abfeb04de8a3481723c7256576. Улучшаем пузырьковую сортировку.

сортировка расческой c код. 20ef9ad19154401d8d165a5d6dd9cb6f. сортировка расческой c код фото. сортировка расческой c код-20ef9ad19154401d8d165a5d6dd9cb6f. картинка сортировка расческой c код. картинка 20ef9ad19154401d8d165a5d6dd9cb6f. Улучшаем пузырьковую сортировку.
сортировка расческой c код. f9c53a7c03d64248851c8878425448dd. сортировка расческой c код фото. сортировка расческой c код-f9c53a7c03d64248851c8878425448dd. картинка сортировка расческой c код. картинка f9c53a7c03d64248851c8878425448dd. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 73292d6b4ee9493f89fb1bec3668823d. сортировка расческой c код фото. сортировка расческой c код-73292d6b4ee9493f89fb1bec3668823d. картинка сортировка расческой c код. картинка 73292d6b4ee9493f89fb1bec3668823d. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c6399e0be1d24339a320c52683805392. сортировка расческой c код фото. сортировка расческой c код-c6399e0be1d24339a320c52683805392. картинка сортировка расческой c код. картинка c6399e0be1d24339a320c52683805392. Улучшаем пузырьковую сортировку.
сортировка расческой c код. bff70ad437b34fe39462948290b2ad69. сортировка расческой c код фото. сортировка расческой c код-bff70ad437b34fe39462948290b2ad69. картинка сортировка расческой c код. картинка bff70ad437b34fe39462948290b2ad69. Улучшаем пузырьковую сортировку.

Здесь все похоже на предыдущую группу.

Повторы

сортировка расческой c код. 06745cdc00134491afcb2d26713867b1. сортировка расческой c код фото. сортировка расческой c код-06745cdc00134491afcb2d26713867b1. картинка сортировка расческой c код. картинка 06745cdc00134491afcb2d26713867b1. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 07b4287ea7cf4b7b9b64ad3d41b7fbbf. сортировка расческой c код фото. сортировка расческой c код-07b4287ea7cf4b7b9b64ad3d41b7fbbf. картинка сортировка расческой c код. картинка 07b4287ea7cf4b7b9b64ad3d41b7fbbf. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 04c1e5cc17bd430580ce0357d541a6a1. сортировка расческой c код фото. сортировка расческой c код-04c1e5cc17bd430580ce0357d541a6a1. картинка сортировка расческой c код. картинка 04c1e5cc17bd430580ce0357d541a6a1. Улучшаем пузырьковую сортировку.
сортировка расческой c код. b8bef592da6542458fffa8c30e7dc0fd. сортировка расческой c код фото. сортировка расческой c код-b8bef592da6542458fffa8c30e7dc0fd. картинка сортировка расческой c код. картинка b8bef592da6542458fffa8c30e7dc0fd. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 92bdb3b8836044eb9665cff354a3be8a. сортировка расческой c код фото. сортировка расческой c код-92bdb3b8836044eb9665cff354a3be8a. картинка сортировка расческой c код. картинка 92bdb3b8836044eb9665cff354a3be8a. Улучшаем пузырьковую сортировку.

Опять все сортировки продемонстрировали удивительную сбалансированность, даже битонная, которая, казалось бы, почти не зависит от массива.

сортировка расческой c код. 98fb7c2e842743ee8f46929bcf8f9318. сортировка расческой c код фото. сортировка расческой c код-98fb7c2e842743ee8f46929bcf8f9318. картинка сортировка расческой c код. картинка 98fb7c2e842743ee8f46929bcf8f9318. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 66d72c118a9e4540b92304ca7d3a3afc. сортировка расческой c код фото. сортировка расческой c код-66d72c118a9e4540b92304ca7d3a3afc. картинка сортировка расческой c код. картинка 66d72c118a9e4540b92304ca7d3a3afc. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 06e29f08a73a4d9bbe2642cb57b9875b. сортировка расческой c код фото. сортировка расческой c код-06e29f08a73a4d9bbe2642cb57b9875b. картинка сортировка расческой c код. картинка 06e29f08a73a4d9bbe2642cb57b9875b. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c122e14d0d554435ab888e2e9afe039d. сортировка расческой c код фото. сортировка расческой c код-c122e14d0d554435ab888e2e9afe039d. картинка сортировка расческой c код. картинка c122e14d0d554435ab888e2e9afe039d. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 74b5c44524c947f6b451f783fa2273cd. сортировка расческой c код фото. сортировка расческой c код-74b5c44524c947f6b451f783fa2273cd. картинка сортировка расческой c код. картинка 74b5c44524c947f6b451f783fa2273cd. Улучшаем пузырьковую сортировку.

Итоговые результаты

сортировка расческой c код. e3872b40e7d4453b8bce8c0008f6fe0d. сортировка расческой c код фото. сортировка расческой c код-e3872b40e7d4453b8bce8c0008f6fe0d. картинка сортировка расческой c код. картинка e3872b40e7d4453b8bce8c0008f6fe0d. Улучшаем пузырьковую сортировку.сортировка расческой c код. f4edeafcb0f444bf8f70b32ba994f3a3. сортировка расческой c код фото. сортировка расческой c код-f4edeafcb0f444bf8f70b32ba994f3a3. картинка сортировка расческой c код. картинка f4edeafcb0f444bf8f70b32ba994f3a3. Улучшаем пузырьковую сортировку.

Убедительное первое место заняла сортировка Шелла по Хиббарду, не уступив ни в одной промежуточной группе. Возможно, стоило ее отправить в первую группу сортировок, но… она слишком слаба для этого, да и тогда почти никого не было бы в группе. Битонная сортировка довольно уверенно заняла второе место. Третье место при миллионе элементах заняла другая сортировка Шелла, а при десяти миллионах сортировка деревом (асимптотика сказалась). Стоит обратить внимание, что при десятикратном увеличении размера входных данных все алгоритмы, кроме древесной сортировки, замедлились почти в 20 раз, а последняя всего лишь в 13.

Третья группа сортировок

Массив случайных чисел

сортировка расческой c код. 2ed22b9da5e74efaa3cd07aa273c013c. сортировка расческой c код фото. сортировка расческой c код-2ed22b9da5e74efaa3cd07aa273c013c. картинка сортировка расческой c код. картинка 2ed22b9da5e74efaa3cd07aa273c013c. Улучшаем пузырьковую сортировку.
сортировка расческой c код. ab8af604939b4079b9c55fa8a235760e. сортировка расческой c код фото. сортировка расческой c код-ab8af604939b4079b9c55fa8a235760e. картинка сортировка расческой c код. картинка ab8af604939b4079b9c55fa8a235760e. Улучшаем пузырьковую сортировку.
сортировка расческой c код. e3279798889a48bfad831c21c3d573e5. сортировка расческой c код фото. сортировка расческой c код-e3279798889a48bfad831c21c3d573e5. картинка сортировка расческой c код. картинка e3279798889a48bfad831c21c3d573e5. Улучшаем пузырьковую сортировку.
сортировка расческой c код. c633b21fef0c4a638209b97a9f9f5701. сортировка расческой c код фото. сортировка расческой c код-c633b21fef0c4a638209b97a9f9f5701. картинка сортировка расческой c код. картинка c633b21fef0c4a638209b97a9f9f5701. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 79f37dca711e42588313e4bcfdfbd80f. сортировка расческой c код фото. сортировка расческой c код-79f37dca711e42588313e4bcfdfbd80f. картинка сортировка расческой c код. картинка 79f37dca711e42588313e4bcfdfbd80f. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 541853c922aa46a69fbb298441962bf6. сортировка расческой c код фото. сортировка расческой c код-541853c922aa46a69fbb298441962bf6. картинка сортировка расческой c код. картинка 541853c922aa46a69fbb298441962bf6. Улучшаем пузырьковую сортировку.
сортировка расческой c код. e4efa862383745f4902704195d15197b. сортировка расческой c код фото. сортировка расческой c код-e4efa862383745f4902704195d15197b. картинка сортировка расческой c код. картинка e4efa862383745f4902704195d15197b. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 7feb69d54a3049fa951b3e667108dc1e. сортировка расческой c код фото. сортировка расческой c код-7feb69d54a3049fa951b3e667108dc1e. картинка сортировка расческой c код. картинка 7feb69d54a3049fa951b3e667108dc1e. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 9531bda1bafa46799568807e49fd78d1. сортировка расческой c код фото. сортировка расческой c код-9531bda1bafa46799568807e49fd78d1. картинка сортировка расческой c код. картинка 9531bda1bafa46799568807e49fd78d1. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 0ae22d99e2fa47fbaaeabc97c371363b. сортировка расческой c код фото. сортировка расческой c код-0ae22d99e2fa47fbaaeabc97c371363b. картинка сортировка расческой c код. картинка 0ae22d99e2fa47fbaaeabc97c371363b. Улучшаем пузырьковую сортировку.
сортировка расческой c код. 461c3fd0882e45fca9a825045e262eee. сортировка расческой c код фото. сортировка расческой c код-461c3fd0882e45fca9a825045e262eee. картинка сортировка расческой c код. картинка 461c3fd0882e45fca9a825045e262eee. Улучшаем пузырьковую сортировку.

сортировка расческой c код. 5e23cd50f814449ab606c99372941e86. сортировка расческой c код фото. сортировка расческой c код-5e23cd50f814449ab606c99372941e86. картинка сортировка расческой c код. картинка 5e23cd50f814449ab606c99372941e86. Улучшаем пузырьковую сортировку.
сортировка расческой c код. ab6cf6817b5f4d85906a7a5917a2a61b. сортировка расческой c код фото. сортировка расческой c код-ab6cf6817b5f4d85906a7a5917a2a61b. картинка сортировка расческой c код. картинка ab6cf6817b5f4d85906a7a5917a2a61b. Улучшаем пузырьковую сортировку.сортировка расческой c код. edc343442e96456db838df3253784167. сортировка расческой c код фото. сортировка расческой c код-edc343442e96456db838df3253784167. картинка сортировка расческой c код. картинка edc343442e96456db838df3253784167. Улучшаем пузырьковую сортировку.сортировка расческой c код. 7e20cc6d14d9432a9d7f60caecb8b9e2. сортировка расческой c код фото. сортировка расческой c код-7e20cc6d14d9432a9d7f60caecb8b9e2. картинка сортировка расческой c код. картинка 7e20cc6d14d9432a9d7f60caecb8b9e2. Улучшаем пузырьковую сортировку.сортировка расческой c код. 1222f3d385a242de916c19e0ebdecc96. сортировка расческой c код фото. сортировка расческой c код-1222f3d385a242de916c19e0ebdecc96. картинка сортировка расческой c код. картинка 1222f3d385a242de916c19e0ebdecc96. Улучшаем пузырьковую сортировку.сортировка расческой c код. 48955d34fec24ee892722a9a5e1c777d. сортировка расческой c код фото. сортировка расческой c код-48955d34fec24ee892722a9a5e1c777d. картинка сортировка расческой c код. картинка 48955d34fec24ee892722a9a5e1c777d. Улучшаем пузырьковую сортировку.сортировка расческой c код. aaf4518cf4444db09a4be92dfcb2c60e. сортировка расческой c код фото. сортировка расческой c код-aaf4518cf4444db09a4be92dfcb2c60e. картинка сортировка расческой c код. картинка aaf4518cf4444db09a4be92dfcb2c60e. Улучшаем пузырьковую сортировку.сортировка расческой c код. 2cdbcb18bddf4074b0b900891f885b2e. сортировка расческой c код фото. сортировка расческой c код-2cdbcb18bddf4074b0b900891f885b2e. картинка сортировка расческой c код. картинка 2cdbcb18bddf4074b0b900891f885b2e. Улучшаем пузырьковую сортировку.сортировка расческой c код. e3366de8df654701ae2c3c6691a3add2. сортировка расческой c код фото. сортировка расческой c код-e3366de8df654701ae2c3c6691a3add2. картинка сортировка расческой c код. картинка e3366de8df654701ae2c3c6691a3add2. Улучшаем пузырьковую сортировку.сортировка расческой c код. 789e57d26c864d35ae8620bf2d59e6d5. сортировка расческой c код фото. сортировка расческой c код-789e57d26c864d35ae8620bf2d59e6d5. картинка сортировка расческой c код. картинка 789e57d26c864d35ae8620bf2d59e6d5. Улучшаем пузырьковую сортировку.сортировка расческой c код. cf883445093f4c0c9c2961b5ff0c1cdc. сортировка расческой c код фото. сортировка расческой c код-cf883445093f4c0c9c2961b5ff0c1cdc. картинка сортировка расческой c код. картинка cf883445093f4c0c9c2961b5ff0c1cdc. Улучшаем пузырьковую сортировку.

Почти все сортировки этой группы имеют почти одинаковую динамику. Почему же почти все сортировки ускоряются, когда массив частично отсортирован? Обменные сортировки работают быстрее потому, что надо делать меньше обменов, в сортировке Шелла выполняется сортировка вставками, которая сильно ускоряется на таких массивах, в пирамидальной сортировке при вставке элементов сразу завершается просеивание, в сортировке слиянием выполняется в лучшем случае вдвое меньше сравнений. Блочная сортировка работает тем лучше, чем меньше разность между минимальным и максимальным элементом. Принципиально отличается только поразрядная сортировка, которой все это безразлично. LSD-версия работает тем лучше, чем больший модуль. Динамика MSD-версия мне не ясна, то, что она сработала быстрее чем LSD удивило.

Частично отсортированный массив

сортировка расческой c код. fa63d34a307344f1a7e611f56f07840e. сортировка расческой c код фото. сортировка расческой c код-fa63d34a307344f1a7e611f56f07840e. картинка сортировка расческой c код. картинка fa63d34a307344f1a7e611f56f07840e. Улучшаем пузырьковую сортировку.сортировка расческой c код. b2837035ac464948aaab5de202b0aa5f. сортировка расческой c код фото. сортировка расческой c код-b2837035ac464948aaab5de202b0aa5f. картинка сортировка расческой c код. картинка b2837035ac464948aaab5de202b0aa5f. Улучшаем пузырьковую сортировку.сортировка расческой c код. 2f7404a32b0942bcb9249a29c2c3e97e. сортировка расческой c код фото. сортировка расческой c код-2f7404a32b0942bcb9249a29c2c3e97e. картинка сортировка расческой c код. картинка 2f7404a32b0942bcb9249a29c2c3e97e. Улучшаем пузырьковую сортировку.сортировка расческой c код. 24b7968341c9407694169e0fbb786a80. сортировка расческой c код фото. сортировка расческой c код-24b7968341c9407694169e0fbb786a80. картинка сортировка расческой c код. картинка 24b7968341c9407694169e0fbb786a80. Улучшаем пузырьковую сортировку.сортировка расческой c код. 78e3f61282aa477090a3b5cde8895ddd. сортировка расческой c код фото. сортировка расческой c код-78e3f61282aa477090a3b5cde8895ddd. картинка сортировка расческой c код. картинка 78e3f61282aa477090a3b5cde8895ddd. Улучшаем пузырьковую сортировку.сортировка расческой c код. c64a079ade304ad79f1450a5139f454c. сортировка расческой c код фото. сортировка расческой c код-c64a079ade304ad79f1450a5139f454c. картинка сортировка расческой c код. картинка c64a079ade304ad79f1450a5139f454c. Улучшаем пузырьковую сортировку.сортировка расческой c код. ff5c3d5351954f5fb77b6cab14bd051a. сортировка расческой c код фото. сортировка расческой c код-ff5c3d5351954f5fb77b6cab14bd051a. картинка сортировка расческой c код. картинка ff5c3d5351954f5fb77b6cab14bd051a. Улучшаем пузырьковую сортировку.сортировка расческой c код. 8dd977596722401795d02dac15f581ab. сортировка расческой c код фото. сортировка расческой c код-8dd977596722401795d02dac15f581ab. картинка сортировка расческой c код. картинка 8dd977596722401795d02dac15f581ab. Улучшаем пузырьковую сортировку.сортировка расческой c код. b4c03dc820a841df8306556ab4b43c62. сортировка расческой c код фото. сортировка расческой c код-b4c03dc820a841df8306556ab4b43c62. картинка сортировка расческой c код. картинка b4c03dc820a841df8306556ab4b43c62. Улучшаем пузырьковую сортировку.сортировка расческой c код. 3145d2aff4ac42d89e033ed0d7860e0b. сортировка расческой c код фото. сортировка расческой c код-3145d2aff4ac42d89e033ed0d7860e0b. картинка сортировка расческой c код. картинка 3145d2aff4ac42d89e033ed0d7860e0b. Улучшаем пузырьковую сортировку.сортировка расческой c код. fed8e13362e14a1d9eb9bac0bb06d57f. сортировка расческой c код фото. сортировка расческой c код-fed8e13362e14a1d9eb9bac0bb06d57f. картинка сортировка расческой c код. картинка fed8e13362e14a1d9eb9bac0bb06d57f. Улучшаем пузырьковую сортировку.

сортировка расческой c код. 497d3750c894473fa06503e478fe105f. сортировка расческой c код фото. сортировка расческой c код-497d3750c894473fa06503e478fe105f. картинка сортировка расческой c код. картинка 497d3750c894473fa06503e478fe105f. Улучшаем пузырьковую сортировку.сортировка расческой c код. 220082f529204e088bc455934713a1f4. сортировка расческой c код фото. сортировка расческой c код-220082f529204e088bc455934713a1f4. картинка сортировка расческой c код. картинка 220082f529204e088bc455934713a1f4. Улучшаем пузырьковую сортировку.сортировка расческой c код. 4f002a45b9e14dfd9cfcd653bc32f028. сортировка расческой c код фото. сортировка расческой c код-4f002a45b9e14dfd9cfcd653bc32f028. картинка сортировка расческой c код. картинка 4f002a45b9e14dfd9cfcd653bc32f028. Улучшаем пузырьковую сортировку.сортировка расческой c код. 19690f4efbff481eb6d823e77bab84bb. сортировка расческой c код фото. сортировка расческой c код-19690f4efbff481eb6d823e77bab84bb. картинка сортировка расческой c код. картинка 19690f4efbff481eb6d823e77bab84bb. Улучшаем пузырьковую сортировку.сортировка расческой c код. e8ad436ac3b84f6d9e581d15414a7928. сортировка расческой c код фото. сортировка расческой c код-e8ad436ac3b84f6d9e581d15414a7928. картинка сортировка расческой c код. картинка e8ad436ac3b84f6d9e581d15414a7928. Улучшаем пузырьковую сортировку.сортировка расческой c код. a967a75cc53840e597cde9f051e88c48. сортировка расческой c код фото. сортировка расческой c код-a967a75cc53840e597cde9f051e88c48. картинка сортировка расческой c код. картинка a967a75cc53840e597cde9f051e88c48. Улучшаем пузырьковую сортировку.сортировка расческой c код. 807671f2475a4f0fbd405d9d0e0552af. сортировка расческой c код фото. сортировка расческой c код-807671f2475a4f0fbd405d9d0e0552af. картинка сортировка расческой c код. картинка 807671f2475a4f0fbd405d9d0e0552af. Улучшаем пузырьковую сортировку.сортировка расческой c код. be55e543386c4316abe8eddf35220817. сортировка расческой c код фото. сортировка расческой c код-be55e543386c4316abe8eddf35220817. картинка сортировка расческой c код. картинка be55e543386c4316abe8eddf35220817. Улучшаем пузырьковую сортировку.сортировка расческой c код. 4250787a83c34bdf8ff35777377f3f68. сортировка расческой c код фото. сортировка расческой c код-4250787a83c34bdf8ff35777377f3f68. картинка сортировка расческой c код. картинка 4250787a83c34bdf8ff35777377f3f68. Улучшаем пузырьковую сортировку.сортировка расческой c код. 7b996b2afec84cc5a222d8140109836c. сортировка расческой c код фото. сортировка расческой c код-7b996b2afec84cc5a222d8140109836c. картинка сортировка расческой c код. картинка 7b996b2afec84cc5a222d8140109836c. Улучшаем пузырьковую сортировку.сортировка расческой c код. ccee7ddd81454134b61394eb5149e608. сортировка расческой c код фото. сортировка расческой c код-ccee7ddd81454134b61394eb5149e608. картинка сортировка расческой c код. картинка ccee7ddd81454134b61394eb5149e608. Улучшаем пузырьковую сортировку.

Здесь все тоже довольно понятно. Стало заметен алгоритм Timsort, на него отсортированность действует сильнее, чем на остальные. Это позволило этому алгоритму почти сравняться с оптимизированной версией быстрой сортировки. Блочная сортировка, несмотря на улучшение времени работы при частичной отсортированности, не смогла обогнать поразрядную сортировку.

Свопы

сортировка расческой c код. 2ab5518019124296887871f9a6b0fe34. сортировка расческой c код фото. сортировка расческой c код-2ab5518019124296887871f9a6b0fe34. картинка сортировка расческой c код. картинка 2ab5518019124296887871f9a6b0fe34. Улучшаем пузырьковую сортировку.сортировка расческой c код. 54d02b9b837f49c4bfc82dfcbd30cefc. сортировка расческой c код фото. сортировка расческой c код-54d02b9b837f49c4bfc82dfcbd30cefc. картинка сортировка расческой c код. картинка 54d02b9b837f49c4bfc82dfcbd30cefc. Улучшаем пузырьковую сортировку.сортировка расческой c код. d05955abec6e4256bc862b024f75e7ec. сортировка расческой c код фото. сортировка расческой c код-d05955abec6e4256bc862b024f75e7ec. картинка сортировка расческой c код. картинка d05955abec6e4256bc862b024f75e7ec. Улучшаем пузырьковую сортировку.сортировка расческой c код. 18b8b150fad344328b800f2b732d5608. сортировка расческой c код фото. сортировка расческой c код-18b8b150fad344328b800f2b732d5608. картинка сортировка расческой c код. картинка 18b8b150fad344328b800f2b732d5608. Улучшаем пузырьковую сортировку.сортировка расческой c код. 9241fa67f42a482cb1319459f27f5ba0. сортировка расческой c код фото. сортировка расческой c код-9241fa67f42a482cb1319459f27f5ba0. картинка сортировка расческой c код. картинка 9241fa67f42a482cb1319459f27f5ba0. Улучшаем пузырьковую сортировку.сортировка расческой c код. f105e4da78364cd8b420b4b3952465a1. сортировка расческой c код фото. сортировка расческой c код-f105e4da78364cd8b420b4b3952465a1. картинка сортировка расческой c код. картинка f105e4da78364cd8b420b4b3952465a1. Улучшаем пузырьковую сортировку.сортировка расческой c код. fa97d887bfd94b809ae518ed6880c982. сортировка расческой c код фото. сортировка расческой c код-fa97d887bfd94b809ae518ed6880c982. картинка сортировка расческой c код. картинка fa97d887bfd94b809ae518ed6880c982. Улучшаем пузырьковую сортировку.сортировка расческой c код. 54d5e278a527477d904b6f84a026614c. сортировка расческой c код фото. сортировка расческой c код-54d5e278a527477d904b6f84a026614c. картинка сортировка расческой c код. картинка 54d5e278a527477d904b6f84a026614c. Улучшаем пузырьковую сортировку.сортировка расческой c код. 307be4538d3246f7ab619f8b2c1c4707. сортировка расческой c код фото. сортировка расческой c код-307be4538d3246f7ab619f8b2c1c4707. картинка сортировка расческой c код. картинка 307be4538d3246f7ab619f8b2c1c4707. Улучшаем пузырьковую сортировку.сортировка расческой c код. 9e9a0040725948d1abf5a31528bddf83. сортировка расческой c код фото. сортировка расческой c код-9e9a0040725948d1abf5a31528bddf83. картинка сортировка расческой c код. картинка 9e9a0040725948d1abf5a31528bddf83. Улучшаем пузырьковую сортировку.сортировка расческой c код. 21c4c7d7003c40fd92acf40b5ee592a6. сортировка расческой c код фото. сортировка расческой c код-21c4c7d7003c40fd92acf40b5ee592a6. картинка сортировка расческой c код. картинка 21c4c7d7003c40fd92acf40b5ee592a6. Улучшаем пузырьковую сортировку.

сортировка расческой c код. 13edf91c269d428096c0918092546a81. сортировка расческой c код фото. сортировка расческой c код-13edf91c269d428096c0918092546a81. картинка сортировка расческой c код. картинка 13edf91c269d428096c0918092546a81. Улучшаем пузырьковую сортировку.сортировка расческой c код. d9bfcc9309e243cfa597bbc01d87b928. сортировка расческой c код фото. сортировка расческой c код-d9bfcc9309e243cfa597bbc01d87b928. картинка сортировка расческой c код. картинка d9bfcc9309e243cfa597bbc01d87b928. Улучшаем пузырьковую сортировку.сортировка расческой c код. 9e5efd9cffcf4074b9c5b3ff1396628d. сортировка расческой c код фото. сортировка расческой c код-9e5efd9cffcf4074b9c5b3ff1396628d. картинка сортировка расческой c код. картинка 9e5efd9cffcf4074b9c5b3ff1396628d. Улучшаем пузырьковую сортировку.сортировка расческой c код. 31d84a9b5687468eae19a3e35ffc84a1. сортировка расческой c код фото. сортировка расческой c код-31d84a9b5687468eae19a3e35ffc84a1. картинка сортировка расческой c код. картинка 31d84a9b5687468eae19a3e35ffc84a1. Улучшаем пузырьковую сортировку.сортировка расческой c код. 1b91a5d41d1e4aaea9da75d5b998cfe5. сортировка расческой c код фото. сортировка расческой c код-1b91a5d41d1e4aaea9da75d5b998cfe5. картинка сортировка расческой c код. картинка 1b91a5d41d1e4aaea9da75d5b998cfe5. Улучшаем пузырьковую сортировку.сортировка расческой c код. aaaf019c89c4481f86a831238f34999d. сортировка расческой c код фото. сортировка расческой c код-aaaf019c89c4481f86a831238f34999d. картинка сортировка расческой c код. картинка aaaf019c89c4481f86a831238f34999d. Улучшаем пузырьковую сортировку.сортировка расческой c код. f6bd351556f147e782e8ff6dda7b1539. сортировка расческой c код фото. сортировка расческой c код-f6bd351556f147e782e8ff6dda7b1539. картинка сортировка расческой c код. картинка f6bd351556f147e782e8ff6dda7b1539. Улучшаем пузырьковую сортировку.сортировка расческой c код. c46ab0fb72fc4787997b04a3c5f6bc17. сортировка расческой c код фото. сортировка расческой c код-c46ab0fb72fc4787997b04a3c5f6bc17. картинка сортировка расческой c код. картинка c46ab0fb72fc4787997b04a3c5f6bc17. Улучшаем пузырьковую сортировку.сортировка расческой c код. 86fed388b5ba4c29a7af02777abbc128. сортировка расческой c код фото. сортировка расческой c код-86fed388b5ba4c29a7af02777abbc128. картинка сортировка расческой c код. картинка 86fed388b5ba4c29a7af02777abbc128. Улучшаем пузырьковую сортировку.сортировка расческой c код. 13975c86576c458a81f670161ebda1a2. сортировка расческой c код фото. сортировка расческой c код-13975c86576c458a81f670161ebda1a2. картинка сортировка расческой c код. картинка 13975c86576c458a81f670161ebda1a2. Улучшаем пузырьковую сортировку.сортировка расческой c код. 2faebaadc7344e688dfce049bd5c8baa. сортировка расческой c код фото. сортировка расческой c код-2faebaadc7344e688dfce049bd5c8baa. картинка сортировка расческой c код. картинка 2faebaadc7344e688dfce049bd5c8baa. Улучшаем пузырьковую сортировку.

Здесь очень хорошо сработали быстрые сортировки. Это, скорее всего, объясняется удачным выбором опорного элемента. Все остальное почти также, как и в предыдущей группе.

Изменения в перестановке

сортировка расческой c код. 86948a52e9c34914900c62a739466a02. сортировка расческой c код фото. сортировка расческой c код-86948a52e9c34914900c62a739466a02. картинка сортировка расческой c код. картинка 86948a52e9c34914900c62a739466a02. Улучшаем пузырьковую сортировку.сортировка расческой c код. db433c29e0cb49f78afecf430fefe225. сортировка расческой c код фото. сортировка расческой c код-db433c29e0cb49f78afecf430fefe225. картинка сортировка расческой c код. картинка db433c29e0cb49f78afecf430fefe225. Улучшаем пузырьковую сортировку.сортировка расческой c код. 81dd61db8e6744a08d26765303ddaf17. сортировка расческой c код фото. сортировка расческой c код-81dd61db8e6744a08d26765303ddaf17. картинка сортировка расческой c код. картинка 81dd61db8e6744a08d26765303ddaf17. Улучшаем пузырьковую сортировку.сортировка расческой c код. dd70bf8927b3450b81098f33e3dd94ff. сортировка расческой c код фото. сортировка расческой c код-dd70bf8927b3450b81098f33e3dd94ff. картинка сортировка расческой c код. картинка dd70bf8927b3450b81098f33e3dd94ff. Улучшаем пузырьковую сортировку.сортировка расческой c код. 89ac4801e4204c7eaab238e30c1eb6d0. сортировка расческой c код фото. сортировка расческой c код-89ac4801e4204c7eaab238e30c1eb6d0. картинка сортировка расческой c код. картинка 89ac4801e4204c7eaab238e30c1eb6d0. Улучшаем пузырьковую сортировку.сортировка расческой c код. 9558e09e494949a5be1f451cd83bd0aa. сортировка расческой c код фото. сортировка расческой c код-9558e09e494949a5be1f451cd83bd0aa. картинка сортировка расческой c код. картинка 9558e09e494949a5be1f451cd83bd0aa. Улучшаем пузырьковую сортировку.сортировка расческой c код. 367b794f6a6d49b78cf8f837b39b687f. сортировка расческой c код фото. сортировка расческой c код-367b794f6a6d49b78cf8f837b39b687f. картинка сортировка расческой c код. картинка 367b794f6a6d49b78cf8f837b39b687f. Улучшаем пузырьковую сортировку.сортировка расческой c код. 0da4dc48750f410681a8b1afb7fce064. сортировка расческой c код фото. сортировка расческой c код-0da4dc48750f410681a8b1afb7fce064. картинка сортировка расческой c код. картинка 0da4dc48750f410681a8b1afb7fce064. Улучшаем пузырьковую сортировку.сортировка расческой c код. c0d1c1f8ccab4f4d945ddad49d3fff59. сортировка расческой c код фото. сортировка расческой c код-c0d1c1f8ccab4f4d945ddad49d3fff59. картинка сортировка расческой c код. картинка c0d1c1f8ccab4f4d945ddad49d3fff59. Улучшаем пузырьковую сортировку.сортировка расческой c код. 047736da3fbc491383e1d6e87304ad14. сортировка расческой c код фото. сортировка расческой c код-047736da3fbc491383e1d6e87304ad14. картинка сортировка расческой c код. картинка 047736da3fbc491383e1d6e87304ad14. Улучшаем пузырьковую сортировку.сортировка расческой c код. cce8e92feb184ab1bec0ad2f5a7bc3da. сортировка расческой c код фото. сортировка расческой c код-cce8e92feb184ab1bec0ad2f5a7bc3da. картинка сортировка расческой c код. картинка cce8e92feb184ab1bec0ad2f5a7bc3da. Улучшаем пузырьковую сортировку.

сортировка расческой c код. f5e0f9114e2f4e5d91fc68b347bb1a67. сортировка расческой c код фото. сортировка расческой c код-f5e0f9114e2f4e5d91fc68b347bb1a67. картинка сортировка расческой c код. картинка f5e0f9114e2f4e5d91fc68b347bb1a67. Улучшаем пузырьковую сортировку.сортировка расческой c код. 5816e345530246d99f842c87f5d32305. сортировка расческой c код фото. сортировка расческой c код-5816e345530246d99f842c87f5d32305. картинка сортировка расческой c код. картинка 5816e345530246d99f842c87f5d32305. Улучшаем пузырьковую сортировку.сортировка расческой c код. de57817cace941c2a2e85f09e41e98f3. сортировка расческой c код фото. сортировка расческой c код-de57817cace941c2a2e85f09e41e98f3. картинка сортировка расческой c код. картинка de57817cace941c2a2e85f09e41e98f3. Улучшаем пузырьковую сортировку.сортировка расческой c код. a55844c7f98f461ea5b3561b34db71a8. сортировка расческой c код фото. сортировка расческой c код-a55844c7f98f461ea5b3561b34db71a8. картинка сортировка расческой c код. картинка a55844c7f98f461ea5b3561b34db71a8. Улучшаем пузырьковую сортировку.сортировка расческой c код. 0ad8df8002eb41828030afd6d98ad751. сортировка расческой c код фото. сортировка расческой c код-0ad8df8002eb41828030afd6d98ad751. картинка сортировка расческой c код. картинка 0ad8df8002eb41828030afd6d98ad751. Улучшаем пузырьковую сортировку.сортировка расческой c код. 98a92218a8fa4575b9d72b92eab82959. сортировка расческой c код фото. сортировка расческой c код-98a92218a8fa4575b9d72b92eab82959. картинка сортировка расческой c код. картинка 98a92218a8fa4575b9d72b92eab82959. Улучшаем пузырьковую сортировку.сортировка расческой c код. 749396bb21874fa98d9f4f434b70cf2b. сортировка расческой c код фото. сортировка расческой c код-749396bb21874fa98d9f4f434b70cf2b. картинка сортировка расческой c код. картинка 749396bb21874fa98d9f4f434b70cf2b. Улучшаем пузырьковую сортировку.сортировка расческой c код. 6e94bcd928384c0a8fadd6d9ba6e04bc. сортировка расческой c код фото. сортировка расческой c код-6e94bcd928384c0a8fadd6d9ba6e04bc. картинка сортировка расческой c код. картинка 6e94bcd928384c0a8fadd6d9ba6e04bc. Улучшаем пузырьковую сортировку.сортировка расческой c код. 1c0ada66538e41ee8d382e1f0782dfa1. сортировка расческой c код фото. сортировка расческой c код-1c0ada66538e41ee8d382e1f0782dfa1. картинка сортировка расческой c код. картинка 1c0ada66538e41ee8d382e1f0782dfa1. Улучшаем пузырьковую сортировку.сортировка расческой c код. 81bb7c2b8a1041f6992190cc6e604906. сортировка расческой c код фото. сортировка расческой c код-81bb7c2b8a1041f6992190cc6e604906. картинка сортировка расческой c код. картинка 81bb7c2b8a1041f6992190cc6e604906. Улучшаем пузырьковую сортировку.сортировка расческой c код. 855ec524db3c47a884d90243aca8bd19. сортировка расческой c код фото. сортировка расческой c код-855ec524db3c47a884d90243aca8bd19. картинка сортировка расческой c код. картинка 855ec524db3c47a884d90243aca8bd19. Улучшаем пузырьковую сортировку.

Мне удалось достичь желаемой цели — поразрядная сортировка упала даже ниже адаптированной быстрой. Блочная сортировка оказалась лучше остальных. Еще почему-то timsort обогнал встроенную сортировку C++, хотя в предыдущей группе был ниже.

Повторы

сортировка расческой c код. c88133e01b634e44b67ee322d7fcd537. сортировка расческой c код фото. сортировка расческой c код-c88133e01b634e44b67ee322d7fcd537. картинка сортировка расческой c код. картинка c88133e01b634e44b67ee322d7fcd537. Улучшаем пузырьковую сортировку.сортировка расческой c код. fdb3971b5c26449da43ed54556f8a0cb. сортировка расческой c код фото. сортировка расческой c код-fdb3971b5c26449da43ed54556f8a0cb. картинка сортировка расческой c код. картинка fdb3971b5c26449da43ed54556f8a0cb. Улучшаем пузырьковую сортировку.сортировка расческой c код. 41a2eb4360544c1597b7028511541e99. сортировка расческой c код фото. сортировка расческой c код-41a2eb4360544c1597b7028511541e99. картинка сортировка расческой c код. картинка 41a2eb4360544c1597b7028511541e99. Улучшаем пузырьковую сортировку.сортировка расческой c код. 3ceff17933b641b192bad4e7d050e1df. сортировка расческой c код фото. сортировка расческой c код-3ceff17933b641b192bad4e7d050e1df. картинка сортировка расческой c код. картинка 3ceff17933b641b192bad4e7d050e1df. Улучшаем пузырьковую сортировку.сортировка расческой c код. 88663f2b46f54b84a38db0849eae6c08. сортировка расческой c код фото. сортировка расческой c код-88663f2b46f54b84a38db0849eae6c08. картинка сортировка расческой c код. картинка 88663f2b46f54b84a38db0849eae6c08. Улучшаем пузырьковую сортировку.сортировка расческой c код. e0ee23dd14c64d8e8fba905526c7d22e. сортировка расческой c код фото. сортировка расческой c код-e0ee23dd14c64d8e8fba905526c7d22e. картинка сортировка расческой c код. картинка e0ee23dd14c64d8e8fba905526c7d22e. Улучшаем пузырьковую сортировку.сортировка расческой c код. 49a12c57c4414d7ab3c82570bcf3f37e. сортировка расческой c код фото. сортировка расческой c код-49a12c57c4414d7ab3c82570bcf3f37e. картинка сортировка расческой c код. картинка 49a12c57c4414d7ab3c82570bcf3f37e. Улучшаем пузырьковую сортировку.сортировка расческой c код. 6ded327dbd0c4a069fdf89d1afaa820d. сортировка расческой c код фото. сортировка расческой c код-6ded327dbd0c4a069fdf89d1afaa820d. картинка сортировка расческой c код. картинка 6ded327dbd0c4a069fdf89d1afaa820d. Улучшаем пузырьковую сортировку.сортировка расческой c код. faaf4c3ee1984647adb9f1d1bffc17d5. сортировка расческой c код фото. сортировка расческой c код-faaf4c3ee1984647adb9f1d1bffc17d5. картинка сортировка расческой c код. картинка faaf4c3ee1984647adb9f1d1bffc17d5. Улучшаем пузырьковую сортировку.сортировка расческой c код. e0b23fcc7a3c422f96dcdc7743b9b4a6. сортировка расческой c код фото. сортировка расческой c код-e0b23fcc7a3c422f96dcdc7743b9b4a6. картинка сортировка расческой c код. картинка e0b23fcc7a3c422f96dcdc7743b9b4a6. Улучшаем пузырьковую сортировку.сортировка расческой c код. f431599a26b94f1cbff33a8430374d78. сортировка расческой c код фото. сортировка расческой c код-f431599a26b94f1cbff33a8430374d78. картинка сортировка расческой c код. картинка f431599a26b94f1cbff33a8430374d78. Улучшаем пузырьковую сортировку.

сортировка расческой c код. 2d13daf482874b5681313c2d0aa3f368. сортировка расческой c код фото. сортировка расческой c код-2d13daf482874b5681313c2d0aa3f368. картинка сортировка расческой c код. картинка 2d13daf482874b5681313c2d0aa3f368. Улучшаем пузырьковую сортировку.сортировка расческой c код. 8562a88835684da298f1f4ca59243bf4. сортировка расческой c код фото. сортировка расческой c код-8562a88835684da298f1f4ca59243bf4. картинка сортировка расческой c код. картинка 8562a88835684da298f1f4ca59243bf4. Улучшаем пузырьковую сортировку.сортировка расческой c код. d38834ca497647f9ad25316c955f1442. сортировка расческой c код фото. сортировка расческой c код-d38834ca497647f9ad25316c955f1442. картинка сортировка расческой c код. картинка d38834ca497647f9ad25316c955f1442. Улучшаем пузырьковую сортировку.сортировка расческой c код. 09fecd67619547928e2e8ec5a6ccba2b. сортировка расческой c код фото. сортировка расческой c код-09fecd67619547928e2e8ec5a6ccba2b. картинка сортировка расческой c код. картинка 09fecd67619547928e2e8ec5a6ccba2b. Улучшаем пузырьковую сортировку.сортировка расческой c код. 0a384d612d3d4720b3b06e989fedc520. сортировка расческой c код фото. сортировка расческой c код-0a384d612d3d4720b3b06e989fedc520. картинка сортировка расческой c код. картинка 0a384d612d3d4720b3b06e989fedc520. Улучшаем пузырьковую сортировку.сортировка расческой c код. e3f35f41941444948b431b2cfdd1e232. сортировка расческой c код фото. сортировка расческой c код-e3f35f41941444948b431b2cfdd1e232. картинка сортировка расческой c код. картинка e3f35f41941444948b431b2cfdd1e232. Улучшаем пузырьковую сортировку.сортировка расческой c код. 6ff9c35bc7f94274b83800ff5a6ee3bc. сортировка расческой c код фото. сортировка расческой c код-6ff9c35bc7f94274b83800ff5a6ee3bc. картинка сортировка расческой c код. картинка 6ff9c35bc7f94274b83800ff5a6ee3bc. Улучшаем пузырьковую сортировку.сортировка расческой c код. 2174fee4c2ee4af2b290d9a02de1aa42. сортировка расческой c код фото. сортировка расческой c код-2174fee4c2ee4af2b290d9a02de1aa42. картинка сортировка расческой c код. картинка 2174fee4c2ee4af2b290d9a02de1aa42. Улучшаем пузырьковую сортировку.сортировка расческой c код. c8331073a91a4306aadb7c53f69cb233. сортировка расческой c код фото. сортировка расческой c код-c8331073a91a4306aadb7c53f69cb233. картинка сортировка расческой c код. картинка c8331073a91a4306aadb7c53f69cb233. Улучшаем пузырьковую сортировку.сортировка расческой c код. ca28b4f9a22146f1ae1a242c6034133e. сортировка расческой c код фото. сортировка расческой c код-ca28b4f9a22146f1ae1a242c6034133e. картинка сортировка расческой c код. картинка ca28b4f9a22146f1ae1a242c6034133e. Улучшаем пузырьковую сортировку.сортировка расческой c код. 6bfd40efd59a4976a1613494fdb734ce. сортировка расческой c код фото. сортировка расческой c код-6bfd40efd59a4976a1613494fdb734ce. картинка сортировка расческой c код. картинка 6bfd40efd59a4976a1613494fdb734ce. Улучшаем пузырьковую сортировку.

Здесь все довольно тоскливо, все сортировки работают с одинаковой динамикой (кроме линейных). Из необычного можно заметить, что сортировка слиянием упала ниже сортировки Шелла.

Итоговые результаты

сортировка расческой c код. 8e779c4b280142b6938fb08ac5432f9e. сортировка расческой c код фото. сортировка расческой c код-8e779c4b280142b6938fb08ac5432f9e. картинка сортировка расческой c код. картинка 8e779c4b280142b6938fb08ac5432f9e. Улучшаем пузырьковую сортировку.сортировка расческой c код. 188f5bf666954b08ad6aacfc6ec91d85. сортировка расческой c код фото. сортировка расческой c код-188f5bf666954b08ad6aacfc6ec91d85. картинка сортировка расческой c код. картинка 188f5bf666954b08ad6aacfc6ec91d85. Улучшаем пузырьковую сортировку.

Если говорить о практическом применении, то хороша поразрядная сортировка (особенно lsd-версия), она стабильна, проста в реализации и очень быстра, однако не основана на сравнениях. Из основанных на сравнениях сортировок лучше всего смотрится быстрая сортировка. Ее недостатки — неустойчивость и квадратичное время работы на неудачных входных данных (пусть они и могут встретиться только при намеренном создании теста). Но с этим можно бороться, например, выбирая опорный элемент по какому-нибудь другому принципу, или же переходя на другую сортировку при неудаче (например, introsort, который, если не ошибаюсь, и реализован в С++). Timsort лишен этих недостатков, лучше работает на сильно отсортированных данных, но все же медленнее в целом и гораздо сложнее пишется. Остальные сортировки на данный момент, пожалуй, не очень практичны. Кроме, конечно, сортировки вставками, которую весьма удачно иногда можно вставить в алгоритм.

Заключение

Должен отметить, что не все известные сортировки приняли участие в тестировании, например, была пропущена плавная сортировка (мне просто не удалось ее адекватно реализовать). Впрочем, не думаю, что это большая потеря, эта сортировка очень громоздкая и медленная, как можно видеть, например, из этой статьи: habrahabr.ru/post/133996 Еще можно исследовать сортировки на распараллеливание, но, во-первых, у меня нет опыта, во-вторых, результаты, которые получались, крайне нестабильны, очень велико влияние системы.

Здесь можно посмотреть результаты всех запусков, а также некоторые вспомогательные тестирования: ссылка на документ.

Реализации алгоритмов с векторами остались, но их корректность и хорошую работу не гарантирую. Проще взять коды функций из статьи и переделать. Генераторы тестов тоже могут не соответствовать действительности, на самом деле такой вид они приняли уже после создания тестов, когда нужно было сделать программу более компактной.

В общем, я доволен проделанной работой, надеюсь, что Вам было интересно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *