Автор оригинала: Team Python Pool.
Алгоритм сортировки оболочки и программа на Python
В этой статье мы узнаем об алгоритме сортировки оболочки с использованием python. Во-первых, мы должны понять, что такое сортировка. Расположение элементов в определенном порядке называется сортировкой. Эффективным методом сортировки является сортировка оболочки в python. Он является производным от алгоритма сортировки вставки. При этом сортировка вставки сначала применяется к элементам, которые находятся дальше друг от друга, а затем применяется к элементам, которые находятся на меньшем расстоянии. Это расстояние или разделение между элементами известно как интервал .
Формула Кнута:
Интервал можно рассчитать по этой формуле.
h : interval (initialized as 1)
Алгоритм сортировки оболочки Python:
- Инициализировать h
- Разделите список на подсписки каждый из интервалов h
- Теперь используйте сортировку вставки для сортировки этих подсписков
- Повторять описанные выше действия нужно до тех пор, пока список не будет полностью отсортирован
Иллюстрация:
Для реализации сортировки оболочки необходимо выполнить следующие шаги:
Сначала возьмите список [34,12,20,7,13,15,2,23]
Для этого примера мы возьмем
Принимая h=4 и создавая подсписок
Теперь мы получаем подсписок как: [34,13], [12,15], [20,2], [7,23]
На следующем шаге мы отсортируем эти подсписки с помощью сортировки вставки
После первого шага мы получаем список как [13,12,2,7,34,15,20,23]
Принимая h=3 и создавая подсписок
Теперь у нас есть новый список и мы возьмем значение has 3
Подсписки, которые мы получаем: [13,7], [12,2], [2,15], [7,20], [34,23]
Теперь мы выполним сортировку вставки в каждом из этих подсписков
После этого шага список, который мы получим: [7,12,2,13,23,15,20,34]
Принимая h=2 и создавая подсписок
Теперь мы возьмем значение
Созданные подсписки являются: [7,2], [12,13], [2,23], [13,15], [23,20], [15,34]
После выполнения сортировки вставки в этих списках результирующий список будет следующим: [2,12,7,13,20,15,23,34]
aking h=1 и создание подсписка
Теперь мы возьмем и создадим подсписки
Подсписки, созданные на этот раз, являются: [2,12], [12,7], [7,13], [13,20], [20,15], [15,23], [23,34]
Теперь мы снова применим вставку сортировки этих отдельных подсписков, и конечный результат, который мы получим, будет [2,7,12,13,15,20,23,34]
Окончательный сортированный список
Исходный код для сортировки оболочки в python:
def shell_sort(inp, n): // 2 while h > 0: for i in range(h, n): [i] while j and inp[j - h] > t: [j - h] j // 2 inp = [34, 12, 20, 7, 13, 15, 2, 23](inp) print('Array before Sorting:') print(inp) shell_sort(inp, n) print('Array after Sorting:') print(inp)
Объяснение:
функция shell_sort ():
- Эта функция принимает список и его размер в качестве параметров
- Интервал 'h' is инициализируется до половины размера списка
- Теперь выполните следующие действия, пока значение h не станет меньше нуляПовторите список от h до конца, Храните каждый элемент во временной переменнойСравните элементы, находящиеся на интервале h, и при необходимости поменяйте местами
- Повторите форму списка h до конца
- Храните каждый элемент во временной переменной
- Сравните элементы, находящиеся на интервале h, и при необходимости поменяйте местами
- Наконец, значение h обновляется, и процесс продолжается до тех пор, пока список не будет полностью отсортирован
Вывод кода сортировки оболочки в python:
Выход
Временная сложность сортировки оболочки:
- Наихудший случай – O(n2)
- Лучший случай – O(n*log n)
- Avergae case – O(n1.25)
Выбранный интервал влияет на временную сложность алгоритма сортировки оболочки.
Преимущества использования Shell Sort:
- Поскольку он имеет улучшенную среднюю временную сложность, сортировка оболочки очень эффективна для списка меньшего и среднего размера
- Эффективность сортировки оболочек лучше, чем у вставки, и почти в пять раз выше, чем у пузырьковой сортировки
Недостатки использования Shell Sort:
- Основным недостатком shell sort является то, что он имеет сложный алгоритм
- Другие методы сортировки, такие как сортировка слиянием, быстрая сортировка и кучная сортировка, оказываются более эффективными, чем сортировка оболочкой
- По мере увеличения размера массива его производительность снижается
Shell Sort In-depth Tutorial Video
Ссылка на видеоурок href="https://youtu.be/w-PQhGpLFRE">Нажмите Здесь. href="https://youtu.be/w-PQhGpLFRE">Нажмите Здесь.
Должен Читать
- Сортировка вставки в Python [Программа, алгоритм, Пример]
- Понимание Python Bubble Sort с примерами
Вывод:
Shell sort не использует стек вызовов, и поскольку он может быть использован очень мало кода, он используется в некоторых библиотеках, таких как uClibc. Сортировка оболочки также присутствует в ядре Linux. Производительность сортировки оболочки лучше, чем сортировка вставки. Однако его href="https://en.wikipedia.org/wiki/Cache_(вычисление)">cache miss ratio выше, чем у quicksort. href="https://en.wikipedia.org/wiki/Cache_(вычисление)">cache miss ratio выше, чем у quicksort.
Однако, если у вас есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.
Счастливого Пифонирования!