Skip to content

Commit b56e249

Browse files
author
Diego Vicente
committed
Add quicksort algorithm
1 parent ea046a4 commit b56e249

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

QuickSort/Rust/quicksort.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
mod sort {
2+
3+
pub fn quicksort<T: Ord>(arr: &mut [T]) {
4+
let length = arr.len();
5+
quicksort_step(arr, 0, (length as isize) - 1);
6+
}
7+
8+
9+
fn quicksort_step<T: Ord>(arr: &mut [T], lo: isize, hi: isize) {
10+
if lo < hi {
11+
let pivot = lomuto_partiton(arr, lo, hi);
12+
quicksort_step(arr, lo, pivot - 1);
13+
quicksort_step(arr, pivot + 1, hi);
14+
}
15+
}
16+
17+
fn lomuto_partiton<T: Ord>(arr: &mut [T], lo: isize, hi: isize) -> isize {
18+
let mut i = lo - 1;
19+
let mut j = lo;
20+
21+
while j < hi - 1 {
22+
if arr[j as usize] < arr[hi as usize] {
23+
i = i + 1;
24+
arr.swap(i as usize, j as usize);
25+
}
26+
j = j + 1;
27+
}
28+
29+
if arr[hi as usize] < arr[(i + 1) as usize] {
30+
arr.swap(hi as usize, (i + 1) as usize);
31+
}
32+
33+
return i + 1;
34+
}
35+
}
36+
37+
fn main() {
38+
let mut arr = [3, 7, 8, 5, 2, 1, 9, 5, 4];
39+
40+
sort::quicksort(&mut arr);
41+
42+
println!("{:?}", arr);
43+
}

0 commit comments

Comments
 (0)