-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquick_sort.py
40 lines (35 loc) · 1.56 KB
/
quick_sort.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def quicksort(array):
"""Быстрая сортировка."""
# Базовый случай рекурсии.
if len(array) <= 1:
return array
# Определяем индекс опорного элемента.
middle_element_index = len(array) // 2
# Получаем опорный элемент:
pivot = array[middle_element_index]
# Передаём в функцию partition() массив и опорный элемент.
left, center, right = partition(array, pivot)
# L - список left, C - center, R - right.
print(f'L{left} + C{center} + R{right}')
# Рекурсивно вызываем quicksort() для левого и правого списков,
# а затем соединяем все три списка в один.
return quicksort(left) + center + quicksort(right)
def partition(array, pivot):
"""
Разбивает массив на три разных массива относительно опорного элемента.
"""
# Создаём три пустых списка.
left, center, right = [], [], []
# Раскладываем элементы по спискам.
for item in array:
if item < pivot:
left.append(item)
elif item > pivot:
right.append(item)
elif item == pivot:
center.append(item)
# Возвращаем кортеж с тремя списками.
return left, center, right
arr = [44, 60, 10, 61, 60, 2, 62, 18, 2, 69]
result = quicksort(arr)
print(result)