-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquick_sort.py
42 lines (35 loc) · 876 Bytes
/
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
"""
Worst Case: O(N^2)
Average Case: O(NLogN)
"""
import random
def randomized_partition(A, p, r):
i = random.randint(p, r)
A[i], A[r] = A[r], A[i]
return partition(A, p, r)
def partition(A, p, r):
pivot = A[r]
i = p - 1
for j in range(p, r):
if A[j] <= pivot:
i += 1
A[i], A[j] = A[j], A[i]
A[i+1], A[r] = A[r], A[i+1]
return i+1
def quick_sort(A, p, r):
if p < r:
q = partition(A, p, r)
quick_sort(A, p, q-1)
quick_sort(A, q+1, r)
def randomized_quicksort(A, p, r):
if p < r:
q = randomized_partition(A, p, r)
quick_sort(A, p, q-1)
quick_sort(A, q+1, r)
data = [1, 2, 10, 9, 8 ,7, 4, 5, 6, 3]
quick_sort(data, 0, len(data)-1)
print("Quicksort")
print(data)
randomized_quicksort(data, 0, len(data)-1)
print("\nRandomized Quicksort")
print(data)