-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquicksort.py
38 lines (34 loc) · 956 Bytes
/
quicksort.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
import random
def quick_sort(lists, p, r):
if p-r >= -1:
return lists
q = partition(lists, p, r)
quick_sort(lists, p, q-1)
quick_sort(lists, q+1, r)
return lists
def partition(lists, p, r):
n = r-p
x = lists[r]
i = p-1
for j in range(p,r):
if lists[j] <= x:
i += 1
lists[i],lists[j] = lists[j],lists[i]
lists[i+1],lists[r] = lists[r],lists[i+1]
return i+1
if __name__ == '__main__':
a = [1,6,2,4,8,5,9,7,3]
n = len(a)-1
quick_sort(a,0,n)
print(a)
def randomized_quick_sort(lists, p, r):
if p-r >= -1:
return lists
q = randomized_partition(lists, p, r)
randomized_quick_sort(lists, p, q-1)
randomized_quick_sort(lists, q+1, r)
return lists
def randomized_partition(lists, p, r):
i =random.randint(p, r)
lists[r],lists[i] = lists[i],lists[r]
return partition(lists, p, r)