Рубрики
Без рубрики

Алгоритм сортировки оболочки и программа на Python

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

Автор оригинала: Team Python Pool.

Алгоритм сортировки оболочки и программа на Python

В этой статье мы узнаем об алгоритме сортировки оболочки с использованием python. Во-первых, мы должны понять, что такое сортировка. Расположение элементов в определенном порядке называется сортировкой. Эффективным методом сортировки является сортировка оболочки в python. Он является производным от алгоритма сортировки вставки. При этом сортировка вставки сначала применяется к элементам, которые находятся дальше друг от друга, а затем применяется к элементам, которые находятся на меньшем расстоянии. Это расстояние или разделение между элементами известно как интервал .

Формула Кнута:

Интервал можно рассчитать по этой формуле.

h : interval (initialized as 1)

Алгоритм сортировки оболочки Python:

  1. Инициализировать h
  2. Разделите список на подсписки каждый из интервалов h
  3. Теперь используйте сортировку вставки для сортировки этих подсписков
  4. Повторять описанные выше действия нужно до тех пор, пока список не будет полностью отсортирован

Иллюстрация:

Для реализации сортировки оболочки необходимо выполнить следующие шаги:

Сначала возьмите список [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]

сортировка оболочки 2
сортировка оболочки 2

Принимая 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:

Вывод для кода сортировки оболочки в python
Вывод для кода сортировки оболочки в 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.

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

Счастливого Пифонирования!