-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquick_sort.py
45 lines (37 loc) · 1.16 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
40
41
42
43
44
45
import random
def rand_partition(array, start_i, end_i):
i = random.randint(start_i, end_i)
temp = array[i]
array[i] = array[end_i]
array[end_i] = temp
j = start_i - 1
for i in range(start_i, end_i):
if array[i] < array[end_i]:
temp = array[i]
array[i] = array[j + 1]
array[j + 1] = temp
j += 1
temp = array[end_i]
array[end_i] = array[j + 1]
array[j + 1] = temp
return array, j + 1
def quick_sort(array, start_i, end_i):
if start_i < end_i:
array, k = rand_partition(array, start_i, end_i)
array = quick_sort(array, start_i, k - 1)
array = quick_sort(array, k + 1, end_i)
return array
def find_k_min(array, k, start_i, end_i):
array, p = rand_partition(array, start_i, end_i)
if p == k:
return array[p]
elif k < p:
return find_k_min(array, k, start_i, p - 1)
else:
return find_k_min(array, k, p + 1, end_i)
if __name__ == "__main__":
a = [i for i in range(10)]
random.shuffle(a)
print(a)
sorted_a = quick_sort(a, 0, len(a) - 1)
print(sorted_a)