Yung L. Leung
В моей предыдущей статье « » сложность простых алгоритмов и структур данных в JavaScript , «Мы обсудили простые сортировочные алгоритмы (пузырь, выделение и сорты введения). Вот, я прохожу через слияние , быстрый & Radix Сортировка, каждый из которых имеет значительное улучшение средний Сложность времени меньше чем O (n²) Отказ
Давайте пройдемся по каждому из них более подробно.
Слияние
А Сортировка слияния Разделяет список в его отдельные предметы. Затем он сортирует их, поскольку они объединяются в растущий упорядоченный список.
На практике это будет означать непрерывно нарезать массив в одно элементные массивы, прежде чем нажать каждый элемент в более широкий массив (сначала меньшее значение). Каждый этап толкающих элементов из 2 меньших массивов на 1 больший массив включает определение того, какой элемент, из которого массив имеет меньшее значение.
Сложность сортировки слияния это O ((n log n) + 1) Отказ Помните, что большая нотация O ( сложность простых алгоритмов и структур данных в JS ) – это счет Количество операций ( O ) Что касается Количество элементов ( n ) Отказ Таким образом, список 4 элемента требует 3 расщепления. Примечание , список уже заказывается для простоты примера.
Объединение 4 массивов требует 6 сравнений.
Таким образом, математический расчет выглядит следующим образом:
Для простоты сложность сортировки слияния – O (n log n) . +1 незначительно относительно стоимости n log n и бревно основы 2 предполагается.
Быстро
А Быстрая сортировка Выбирает значение (по индексу 0), отключится все меньшие значения ближе к нему, затем делает окончательный своп для размещения выбранного значения перед меньшими значениями (индекс где-то после 0). Таким образом, все значения за поворотное значение меньшие значения. Все значения перед ним являются большие значения. Следовательно, при повороте, Выбранное значение ( Pivot ) помещается в его правильное положение. Процесс повторяется до тех пор, пока все значения не будут «поворачиваться» на их правильные позиции.
Похоже на практике до Сортировка слияния, Быстрая сортировка Требуется разделение списка в меньшие списки. Вместо того, чтобы сортировать об слиянии, выбирается поворот для заказа списка, так что меньше значения находятся в левом и большим значениям. Поэтому неудивительно, что, как Сортировка слиянием , Быстрая сортировка также имеет сложность O (n log n) Отказ
Таким образом, для 4-х элементных массив выбирается поворот, и его правильное положение найдено (то есть, 2 при индексе 0 принадлежит к индексу 1). Во время этого открытия 3 сравнения выполнены с поворотным значением (2) до остальных элементов (4, 1 и 3).
Частично сортированная массив (1, 2, 4, 3) затем разлагается, чтобы найти поворотные положения значения 1 и 4 ( по сравнению со значением 3 ) Перед обнаружением последнего поворота (значение 3 ). Это составляет 4 сравнения и открытие 4 поворотных позиций или:
Редикс
А Radix Сортировать Постоянно приказывает список чисел их базой десять цифр.
В этом случае числа (101, 54, 305, 6, 81) сначала упорядочены по цифре «Место 0», затем 10-е место для определения цифры и, наконец, 100-х годов. На практике это означает создание ведер (цифры от 0 до 9) для хранения чисел с общими цифрами (то есть 10 1 и 8 1 делится общую цифру в размере 0). Затем, сочетая все номера в их заказах в их ведре (начиная с 0’s Place: 10 1 , 8 1 , 5 4 , 30 5 , 6 ), Перед повторением процесса по сравнению с цифрами места 10. Это продолжается до тех пор, пока не достигнуты самые высокие цифры (то есть, 1 01 & 3 05 имеют 100-го места место).
В общем, сложность Radix Сортировать это O (на) Отказ
- n количество элементов
- к это среднее количество цифр на элемент
Количество чисел для сортировки ( n ) – это количество раз, когда требуется делать вложения в эти цифровые ведра. Так что список 101, 54, 305, 6, 81 требует не менее 5 отложений. Чем выше цифры ( k ) из числа коллекции, тем более раз требуется повторить процесс сортировки из 0, 10-х, 100, 1000 и т. Д. Итак, список 101, 54, 305, 6, 81 требует 5 депозитов для 0’s , 10’s & 100’s место. Это всего в общей сложности 3 х депозиты.
Заключение
Учебные передовые алгоритмы не уменьшают важность более основных. Это через изучение основных алгоритмов, которые вы узнаете о том, что это значит для поиска или сортировки, просто. И из этого исследования вы можете начать понимать проблемы, которые поставляются с этими основными алгоритмами.
Ничто не создано в вакууме. Начинается с идеи. Откуда он идет от этого человеческий разум, и что мы можем сделать с физическим миром вокруг нас. Это «всегда один день», если вы решите расширить свои горизонты.
Ссылка:
https://www.udemy.com/js-algorithms-and-data-structures-masterclass/
Оригинал: “https://www.freecodecamp.org/news/an-intro-to-advanced-sorting-algorithms-merge-quick-radix-sort-in-javascript-b65842194597/”