Программа будет сортировать список методом быстрой сортировки (QuickSort).
Суть сортировки:
- Выбрать опорный элемент из массива. Обычно опорным элементом является средний элемент.
- Разделить массив на два подмассива: элементы меньше опорного и элементы больше опорного.
- Рекурсивно применить сортировку к двум подмассивам.
Сложность сортировки по времени:
- Худшая O(n^2)
- Средняя O(n * log2n)
- Лучшая O(n * 2log 2n)
Шаги к правильному решению
- Создадим функцию
quicksort
, которая принимает на вход список и 2 переменные:start
иend
. - Если
end-start
не больше 1, выходим. - Найдем индекс опорного элемента
p
,p = partion(alist, start, end)
. - Вызовем
quicksort(alist, start, p)
. - Вызовем
quicksort(alist, p + 1, end).
- Определим функцию
partition
, которая принимает список и 2 параметра:start
,end
. - Функция
partition
использует схему разбиения Хоара.
def quicksort(alist, start, end): '''Sorts the list from indexes start to end - 1 inclusive.''' if end - start > 1: p = partition(alist, start, end) quicksort(alist, start, p) quicksort(alist, p + 1, end) def partition(alist, start, end): pivot = alist[start] i = start + 1 j = end - 1 while True: while (i <= j and alist[i] <= pivot): i = i + 1 while (i <= j and alist[j] >= pivot): j = j - 1 if i <= j: alist[i], alist[j] = alist[j], alist[i] else: alist[start], alist[j] = alist[j], alist[start] return j alist = input('Enter the list of numbers: ').split() alist = [int(x) for x in alist] quicksort(alist, 0, len(alist)) print('Sorted list: ', end='') print(alist)