|
1 | | -def swap(a, b): |
2 | | - temp = a |
3 | | - a = b |
4 | | - b = temp |
| 1 | +def quick_sort(arr): |
| 2 | + quick_sort_helper(arr, 0, len(arr)-1) |
5 | 3 |
|
6 | | -def quick_sort(array): |
7 | | - quick_sort_helper(array, 0, len(array)-1) |
8 | 4 |
|
9 | 5 | def quick_sort_helper(arr, first, last):
|
10 | | - if first < last: |
11 | | - split_point = partition(arr, first, last) |
| 6 | + if first < last: |
| 7 | + pi = partition(arr, first, last) |
| 8 | + |
| 9 | + quick_sort_helper(arr, first, pi-1) |
| 10 | + quick_sort_helper(arr, pi+1, last) |
12 | 11 |
|
13 | | - quick_sort_helper(arr, first, split_point - 1) |
14 | | - quick_sort_helper(arr, split_point + 1, last) |
15 | 12 |
|
16 | 13 | def partition(arr, first, last):
|
17 | | - pivot = arr[first] |
| 14 | + pivot = arr[first] |
| 15 | + |
| 16 | + left = first+1 |
| 17 | + right = last |
18 | 18 |
|
19 | | - left = first + 1 |
20 | | - right = last |
| 19 | + done = False |
| 20 | + while not done: |
| 21 | + while left <= right and arr[left] <= pivot: |
| 22 | + left += 1 |
21 | 23 |
|
22 | | - done = False |
| 24 | + while arr[right] >= pivot and right >= left: |
| 25 | + right -= 1 |
23 | 26 |
|
24 | | - while not done: |
25 | | - |
26 | | - # move left and right pointers to locate split_point |
27 | | - while left <= right and arr[left] <= pivot: |
28 | | - left += 1 |
29 | | - while arr[right] >= pivot and right >= left: |
30 | | - right -= 1 |
| 27 | + if right < left: |
| 28 | + done = True |
| 29 | + else: |
| 30 | + arr[left], arr[right] = arr[right], arr[left] |
31 | 31 |
|
32 | | - # when both pointers cross each other |
33 | | - # we have located the split_point |
34 | | - if right < left: |
35 | | - done = True |
36 | | - else: |
37 | | - # swap the left and right elements |
38 | | - swap(arr[left], arr[right]) |
| 32 | + arr[first], arr[right] = arr[right], arr[first] |
39 | 33 |
|
40 | | - # swap the first and right elements |
41 | | - swap(arr[first], arr[right]) |
| 34 | + return right |
42 | 35 |
|
43 | | - return right |
44 | 36 |
|
45 | | -array= [54,26,93,17,77,31,44,55,20] |
46 | | -quick_sort(array) |
47 | | -print(array) |
| 37 | +alist= [54,26,93,17,77,31,44,55,20] |
| 38 | +quick_sort(alist) |
| 39 | +print(alist) # [17, 20, 26, 31, 44, 54, 55, 77, 93] |
0 commit comments