From 91b64fbfc46ab8916eeffd038cb267726a9ec37f Mon Sep 17 00:00:00 2001 From: Kirisame Date: Wed, 14 Feb 2024 22:45:44 +0900 Subject: [PATCH] perf: optimized space complexity --- src/sorting/quick_sort.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/sorting/quick_sort.rs b/src/sorting/quick_sort.rs index 9f47587dafa..102edc6337d 100644 --- a/src/sorting/quick_sort.rs +++ b/src/sorting/quick_sort.rs @@ -1,5 +1,3 @@ -use std::cmp::PartialOrd; - pub fn partition(arr: &mut [T], lo: usize, hi: usize) -> usize { let pivot = hi; let mut i = lo; @@ -25,13 +23,19 @@ pub fn partition(arr: &mut [T], lo: usize, hi: usize) -> usize { i } -fn _quick_sort(arr: &mut [T], lo: usize, hi: usize) { - if lo < hi { - let p = partition(arr, lo, hi); - if p > 0 { - _quick_sort(arr, lo, p - 1); +fn _quick_sort(arr: &mut [T], mut lo: usize, mut hi: usize) { + while lo < hi { + let pivot = partition(arr, lo, hi); + + if pivot - lo < hi - pivot { + if pivot > 0 { + _quick_sort(arr, lo, pivot - 1); + } + lo = pivot + 1; + } else { + _quick_sort(arr, pivot + 1, hi); + hi = pivot - 1; } - _quick_sort(arr, p + 1, hi); } }