Сортировка относится к упорядочению данных в определенном формате. Алгоритм сортировки определяет способ упорядочения данных в определенном порядке. Наиболее распространенные заказы в числовом или лексикографическом порядке.
Важность сортировки заключается в том, что поиск данных может быть оптимизирован до очень высокого уровня, если данные хранятся в отсортированном виде. Сортировка также используется для представления данных в более удобочитаемых форматах. Ниже мы видим пять таких реализаций сортировки в python.
- Пузырьковая сортировка
- Сортировка слиянием
- Сортировка вставки
- Shell Sort
- Выбор сортировки
Пузырьковая сортировка
Это основанный на сравнении алгоритм, в котором сравнивается каждая пара соседних элементов, и элементы меняются местами, если они не в порядке.
def bubblesort(list): # Swap the elements to arrange in order for iter_num in range(len(list)-1,0,-1): for idx in range(iter_num): if list[idx]>list[idx+1]: temp = list[idx] list[idx] = list[idx+1] list[idx+1] = temp list = [19,2,31,45,6,11,121,27] bubblesort(list) print(list)
Когда приведенный выше код выполняется, он дает следующий результат —
[2, 6, 11, 19, 27, 31, 45, 121]
Сортировка слиянием
Сортировка слиянием сначала делит массив на равные половины, а затем объединяет их отсортированным образом.
def merge_sort(unsorted_list): if len(unsorted_list) <= 1: return unsorted_list # Find the middle point and devide it middle = len(unsorted_list) // 2 left_list = unsorted_list[:middle] right_list = unsorted_list[middle:] left_list = merge_sort(left_list) right_list = merge_sort(right_list) return list(merge(left_list, right_list)) # Merge the sorted halves def merge(left_half,right_half): res = [] while len(left_half) != 0 and len(right_half) != 0: if left_half[0] < right_half[0]: res.append(left_half[0]) left_half.remove(left_half[0]) else: res.append(right_half[0]) right_half.remove(right_half[0]) if len(left_half) == 0: res = res + right_half else: res = res + left_half return res unsorted_list = [64, 34, 25, 12, 22, 11, 90] print(merge_sort(unsorted_list))
Когда приведенный выше код выполняется, он дает следующий результат —
[11, 12, 22, 25, 34, 64, 90]
Сортировка вставки
Сортировка вставки включает в себя поиск нужного места для данного элемента в отсортированном списке. Итак, в начале мы сравниваем первые два элемента и сортируем их, сравнивая их. Затем мы выбираем третий элемент и находим его правильную позицию среди двух предыдущих отсортированных элементов. Таким образом, мы постепенно добавляем больше элементов в уже отсортированный список, помещая их в правильное положение.
def insertion_sort(InputList): for i in range(1, len(InputList)): j = i-1 nxt_element = InputList[i] # Compare the current element with next one while (InputList[j] > nxt_element) and (j >= 0): InputList[j+1] = InputList[j] j=j-1 InputList[j+1] = nxt_element list = [19,2,31,45,30,11,121,27] insertion_sort(list) print(list)
Когда приведенный выше код выполняется, он дает следующий результат —
[2, 11, 19, 27, 30, 31, 45, 121]
Shell Sort
Оболочка сортировки включает в себя сортировку элементов, которые находятся далеко друг от друга. Мы сортируем большой подсписок данного списка и продолжаем уменьшать размер списка, пока все элементы не будут отсортированы. Приведенная ниже программа находит разрыв, приравнивая его к половине длины списка, и затем начинает сортировать все элементы в нем. Затем мы продолжаем сбрасывать разрыв, пока весь список не будет отсортирован.
def shellSort(input_list): gap = len(input_list) // 2 while gap > 0: for i in range(gap, len(input_list)): temp = input_list[i] j = i # Sort the sub list for this gap while j >= gap and input_list[j - gap] > temp: input_list[j] = input_list[j - gap] j = j-gap input_list[j] = temp # Reduce the gap for the next element gap = gap//2 list = [19,2,31,45,30,11,121,27] shellSort(list) print(list)
Когда приведенный выше код выполняется, он дает следующий результат —
[2, 11, 19, 27, 30, 31, 45, 121]
Выбор сортировки
В сортировке выбора мы начинаем с поиска минимального значения в данном списке и перемещаем его в отсортированный список. Затем мы повторяем процесс для каждого из оставшихся элементов в несортированном списке. Следующий элемент, входящий в отсортированный список, сравнивается с существующими элементами и размещается в правильной позиции. Таким образом, в конце все элементы из несортированного списка сортируются.
def selection_sort(input_list): for idx in range(len(input_list)): min_idx = idx for j in range( idx +1, len(input_list)): if input_list[min_idx] > input_list[j]: min_idx = j # Swap the minimum value with the compared value input_list[idx], input_list[min_idx] = input_list[min_idx], input_list[idx] l = [19,2,31,45,30,11,121,27] selection_sort(l) print(l)
Когда приведенный выше код выполняется, он дает следующий результат —