-
Notifications
You must be signed in to change notification settings - Fork 236
/
Copy pathquick-sort.py
73 lines (64 loc) · 1.79 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# QUICK SORT
# BEST: O(nlogn) time, O(logn) space
# AVERAGE: O(nlogn) time, O(logn) space
# WORST: O(n^2) time, O(logn) space
def quickSort(array):
# Write your code here.
partition(array, 0, len(array) - 1)
return array
def partition(array, low, high):
if low < high:
print("Inside partition")
pivot = quickSortHelper(array, low, high)
print("low",low,"high",high,"pivot",pivot)
partition(array, low, pivot - 1)
partition(array, pivot + 1, high)
def quickSortHelper(array, low, high):
print("Quicksorthelper")
pivot = array[low]
left = low + 1
right = high
while right >= left:
if array[left] > pivot and array[right] < pivot:
swap(array, left, right)
left += 1
right -= 1
elif array[left] <= pivot:
left += 1
elif array[right] >= pivot:
right -= 1
swap(array, low, right)
return right
def swap(array, one, two):
array[one], array[two] = array[two], array[one]
# BEST: O(nlogn) time, O(logn) space
# AVERAGE: O(nlogn) time, O(logn) space
# WORST: O(n^2) time, O(logn) space
def quickSort(array):
# Write your code here.
quickSortHelper(array, 0, len(array) - 1)
return array
def quickSortHelper(array, low, high):
print("Quicksorthelper")
if low >= high:
return
pivot = array[low]
left = low + 1
right = high
while right >= left:
if array[left] > pivot and array[right] < pivot:
swap(array, left, right)
if array[left] <= pivot:
left += 1
if array[right] >= pivot:
right -= 1
swap(array, low, right)
leftSubArrayIsSmaller = right - 1 - low < high - (right + 1)
if leftSubArrayIsSmaller:
quickSortHelper(array, low, right - 1)
quickSortHelper(array, right + 1, high)
else:
quickSortHelper(array, right + 1, high)
quickSortHelper(array, low, right - 1)
def swap(array, one, two):
array[one], array[two] = array[two], array[one]