Программа будет сортировать список методом быстрой сортировки (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)
