Skip to content

Commit 55227f0

Browse files
committed
lomuto partioning for quicksort
1 parent 90f531c commit 55227f0

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

sorting/quicksort.py

+10-13
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
11
def partition(arr: list[int], l: int, r:int) -> None:
2-
pivot = arr[l]
3-
lo, hi = l + 1, r
4-
while lo < hi:
5-
while lo <= hi and arr[lo] < pivot: lo += 1 #strict comparison is important for cases with repeated elements
6-
while lo <= hi and arr[hi] > pivot: hi -= 1 #idem
7-
if lo < hi:
8-
arr[lo], arr[hi] = arr[hi], arr[lo]
9-
if arr[l] > arr[hi]:
10-
arr[l], arr[hi] = arr[hi], arr[l]
11-
return lo
12-
return hi
2+
pivot = arr[r]
3+
pivot_index = l
4+
for i in range(l,r):
5+
if arr[i] <= pivot:
6+
arr[i],arr[pivot_index]=arr[pivot_index],arr[i]
7+
pivot_index += 1
8+
arr[r],arr[pivot_index]=arr[pivot_index],arr[r]
9+
return pivot_index
1310
def qs(arr: list[int], l: int, r:int) -> None:
1411
if l >= r: return
1512
p = partition(arr, l, r)
1613
qs(arr,l,p-1)
1714
qs(arr,p+1,r)
1815

19-
arr = [3,4,1,2,7,8,3,5,7,9]
16+
arr = [4,1,3,2,7,8,9,6,6]#[3,4,1,2,7,8,3,5,7,9]
2017
print(arr)
21-
print(qs(arr, 0, len(arr)-1))
18+
qs(arr, 0, len(arr)-1)
2219
print(arr)
2320

0 commit comments

Comments
 (0)