Skip to content

Commit f1c4756

Browse files
committed
quciksort
1 parent 952063a commit f1c4756

File tree

3 files changed

+14
-16
lines changed

3 files changed

+14
-16
lines changed

benches/sort_benchmark.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use criterion::{black_box, criterion_group, criterion_main, Criterion};
22
use sorting_algorithm::bubblesort;
3+
use sorting_algorithm::quicksort;
34

45
fn sort_arrays_benchmark(c: &mut Criterion) {
56
let mut arr = black_box([-2,-7,2,10,20,9]);
67

7-
c.bench_function("Bubblesort", |b| b.iter(|| bubblesort(&mut arr)));
8-
8+
c.bench_function("Bubble Sort", |b| b.iter(|| bubblesort(&mut arr)));
9+
c.bench_function("Quick Sort", |b| b.iter(|| quicksort(&mut arr)));
910
}
1011

1112
criterion_group!(benches, sort_arrays_benchmark);

src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ mod tests {
1515
}
1616
#[test]
1717
fn test_quick_sort() {
18-
let mut array = [10, 7, 8, 9, 1, 5];
19-
let sorted = quicksort(&mut array);
20-
assert_eq!(sorted, &[1, 5, 7, 8, 9, 10]);
18+
let mut arr = [6, 2, 4, 1, 9, -2, 5];
19+
quicksort(&mut arr);
20+
assert_eq!(arr, [-2, 1, 2, 4, 5, 6, 9]);
2121
}
2222
}

src/quciksort.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
1-
pub fn quicksort(array: &mut [i32]) -> &[i32] {
1+
pub fn quicksort<T: Ord>(array: &mut [T]) {
22
let low: isize = 0;
33
let high: isize = (array.len() - 1) as isize;
44

5-
sort(array, low, high);
5+
sort(array, low, high);
66

7-
8-
fn sort(array: &mut [i32], low: isize, high: isize) -> &[i32]{
7+
fn sort<T: Ord>(array: &mut [T], low: isize, high: isize){
98
if low < high {
109
let pi: isize = temp(array, low, high);
1110

1211
sort(array, low, pi - 1);
1312
sort(array, (pi + 1) as isize, high);
14-
}
15-
array
13+
1614
}
1715

18-
fn temp(array: &mut [i32], low: isize, high: isize) -> isize {
19-
let temp = array[high as usize];
16+
fn temp<T: Ord>(array: &mut [T], low: isize, high: isize) -> isize {
2017
let mut i = low - 1;
2118

2219
for j in 0..high {
23-
if array[j as usize] < temp {
20+
if &array[j as usize] < &array[high as usize] {
21+
2422
i += 1;
2523

2624
array.swap(i as usize, j as usize);
@@ -30,6 +28,5 @@ pub fn quicksort(array: &mut [i32]) -> &[i32] {
3028
array.swap((i + 1) as usize, high as usize);
3129
i + 1
3230
}
33-
34-
array
31+
}
3532
}

0 commit comments

Comments
 (0)