Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9c94cc6

Browse files
authoredOct 14, 2024··
Create dual_pivot_quick_sort.py
1 parent e9e7c96 commit 9c94cc6

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
 

‎sorts/dual_pivot_quick_sort.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
class DualPivotQuickSort:
2+
def sort(self, array):
3+
if len(array) <= 1:
4+
return array
5+
6+
self.dual_pivot_quick_sort(array, 0, len(array) - 1)
7+
return array
8+
9+
def dual_pivot_quick_sort(self, array, left, right):
10+
if left < right:
11+
pivots = self.partition(array, left, right)
12+
13+
self.dual_pivot_quick_sort(array, left, pivots[0] - 1)
14+
self.dual_pivot_quick_sort(array, pivots[0] + 1, pivots[1] - 1)
15+
self.dual_pivot_quick_sort(array, pivots[1] + 1, right)
16+
17+
def partition(self, array, left, right):
18+
if array[left] > array[right]:
19+
array[left], array[right] = array[right], array[left]
20+
21+
pivot1 = array[left]
22+
pivot2 = array[right]
23+
24+
pivot1_end = left + 1
25+
low = left + 1
26+
high = right - 1
27+
28+
while low <= high:
29+
if array[low] < pivot1:
30+
array[low], array[pivot1_end] = array[pivot1_end], array[low]
31+
pivot1_end += 1
32+
elif array[low] >= pivot2:
33+
while low < high and array[high] > pivot2:
34+
high -= 1
35+
array[low], array[high] = array[high], array[low]
36+
high -= 1
37+
38+
if array[low] < pivot1:
39+
array[low], array[pivot1_end] = array[pivot1_end], array[low]
40+
pivot1_end += 1
41+
low += 1
42+
43+
pivot1_end -= 1
44+
high += 1
45+
46+
array[left], array[pivot1_end] = array[pivot1_end], array[left]
47+
array[right], array[high] = array[high], array[right]
48+
49+
return low, high
50+
51+
# Example usage
52+
if __name__ == "__main__":
53+
sorter = DualPivotQuickSort()
54+
sample_array = [3, 7, 8, 5, 2, 1, 9, 5, 4]
55+
sorted_array = sorter.sort(sample_array)
56+
print("Sorted array:", sorted_array)

0 commit comments

Comments
 (0)
Please sign in to comment.