Skip to content

Commit 9572098

Browse files
authored
Optimise quick_sort (TheAlgorithms#678)
perf: optimized space complexity
1 parent 06a56e9 commit 9572098

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/sorting/quick_sort.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::cmp::PartialOrd;
2-
31
pub fn partition<T: PartialOrd>(arr: &mut [T], lo: usize, hi: usize) -> usize {
42
let pivot = hi;
53
let mut i = lo;
@@ -25,13 +23,19 @@ pub fn partition<T: PartialOrd>(arr: &mut [T], lo: usize, hi: usize) -> usize {
2523
i
2624
}
2725

28-
fn _quick_sort<T: Ord>(arr: &mut [T], lo: usize, hi: usize) {
29-
if lo < hi {
30-
let p = partition(arr, lo, hi);
31-
if p > 0 {
32-
_quick_sort(arr, lo, p - 1);
26+
fn _quick_sort<T: Ord>(arr: &mut [T], mut lo: usize, mut hi: usize) {
27+
while lo < hi {
28+
let pivot = partition(arr, lo, hi);
29+
30+
if pivot - lo < hi - pivot {
31+
if pivot > 0 {
32+
_quick_sort(arr, lo, pivot - 1);
33+
}
34+
lo = pivot + 1;
35+
} else {
36+
_quick_sort(arr, pivot + 1, hi);
37+
hi = pivot - 1;
3338
}
34-
_quick_sort(arr, p + 1, hi);
3539
}
3640
}
3741

0 commit comments

Comments
 (0)