-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathquicksort.py
More file actions
59 lines (46 loc) · 1.77 KB
/
Copy pathquicksort.py
File metadata and controls
59 lines (46 loc) · 1.77 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""
Быстрая сортировка
Реализуйте эффективный алгоритм быстрой сортировки, который обсуждался на семинаре.
Формат входных данных
Ввод осуществляется со стандартного потока ввода.
Первая и единственная строка всегда содержит входной массив.
Все данные гарантированно валидны, проверять данные на корректность не нужно.
Формат результата
Результат работы - отсортированный массив.
Результат работы программы выводится в стандартный поток вывода.
Пример
Входные данные
4 3 5 1 2
Результат работы
1 2 3 4 5
"""
import random
def quicksort(array):
def qsort(left,right):
if right<=left:
return
num = random.randint(left, right)
pivot = array[num]
array[num],array[right]=array[right],pivot
r = right-1
l = left
while True:
for l in range(l,right+1):
if array[l]>=pivot:
break
for r in range(r,l-1,-1):
if array[r]<pivot:
break
if l<r:
array[l],array[r]=array[r],array[l]
l+=1
r-=1
else:
array[l],array[right]=pivot,array[l]
qsort(left,l-1)
qsort(l+1,right)
return
qsort(0,len(array)-1)
array = [int(X) for X in input().split(' ')]
quicksort(array)
print(' '.join([str(x) for x in array]))