mirror of
https://gitlab.com/Anson-Projects/anson-stuff/Go-v-Rust-Quicksort.git
synced 2025-06-15 13:46:40 +00:00
final code
This commit is contained in:
parent
934f5aa61b
commit
b43510b33e
@ -21,7 +21,6 @@ func quicksort(slice []int) {
|
||||
}
|
||||
|
||||
func par_quicksort(slice []int) {
|
||||
|
||||
if len(slice) <= 1 {
|
||||
return
|
||||
}
|
||||
@ -89,7 +88,6 @@ func choose_pivot(slice []int) int {
|
||||
} else {
|
||||
return mid
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func swap(slice []int, a int, b int) {
|
||||
@ -103,18 +101,17 @@ func main() {
|
||||
sortSize := 20000000
|
||||
// MAXGOROUTINES := 1
|
||||
unsorted := make([]int, 0, sortSize)
|
||||
unsorted = rand.Perm(sortSize)
|
||||
|
||||
start := time.Now()
|
||||
unsorted = rand.Perm(sortSize)
|
||||
quicksort(unsorted)
|
||||
duration := time.Since(start)
|
||||
fmt.Println("single ", duration)
|
||||
fmt.Println("Single Threaded: ", duration)
|
||||
|
||||
unsorted = rand.Perm(sortSize)
|
||||
start = time.Now()
|
||||
unsorted = rand.Perm(sortSize)
|
||||
par_quicksort(unsorted)
|
||||
duration = time.Since(start)
|
||||
|
||||
fmt.Println(duration)
|
||||
fmt.Println("Concurrent: ", duration)
|
||||
|
||||
}
|
||||
|
1
rust/.rustfmt.toml
Normal file
1
rust/.rustfmt.toml
Normal file
@ -0,0 +1 @@
|
||||
max_width = 60
|
@ -3,7 +3,8 @@
|
||||
use rayon::join;
|
||||
|
||||
fn choose_pivot<T: Ord>(slice: &[T]) -> usize {
|
||||
let (mut left, mid, mut right) = (0, slice.len() / 2, slice.len() - 1);
|
||||
let (mut left, mid, mut right) =
|
||||
(0, slice.len() / 2, slice.len() - 1);
|
||||
if slice[right] < slice[left] {
|
||||
std::mem::swap(&mut right, &mut left);
|
||||
}
|
||||
@ -16,7 +17,10 @@ fn choose_pivot<T: Ord>(slice: &[T]) -> usize {
|
||||
}
|
||||
}
|
||||
|
||||
fn partition<T: Ord>(slice: &mut [T], pivot: usize) -> usize {
|
||||
fn partition<T: Ord>(
|
||||
slice: &mut [T],
|
||||
pivot: usize,
|
||||
) -> usize {
|
||||
let mid = slice.len() - 1;
|
||||
slice.swap(pivot, mid);
|
||||
let (mut left, mut right) = (0, mid - 1);
|
||||
@ -62,7 +66,8 @@ fn quicksort<T: Ord + std::marker::Send>(slice: &mut [T]) {
|
||||
}
|
||||
|
||||
let pivot = partition(slice, choose_pivot(slice));
|
||||
let (left_slice, right_slice) = slice.split_at_mut(pivot);
|
||||
let (left_slice, right_slice) =
|
||||
slice.split_at_mut(pivot);
|
||||
|
||||
let right_slice = &mut right_slice[1..]; // want to exclude pivot
|
||||
|
||||
@ -70,7 +75,9 @@ fn quicksort<T: Ord + std::marker::Send>(slice: &mut [T]) {
|
||||
quicksort(right_slice);
|
||||
}
|
||||
|
||||
fn par_quicksort<T: Ord + std::marker::Send>(slice: &mut [T]) {
|
||||
fn par_quicksort<T: Ord + std::marker::Send>(
|
||||
slice: &mut [T],
|
||||
) {
|
||||
if slice.len() <= 1 {
|
||||
return;
|
||||
} else if slice.len() == 2 {
|
||||
@ -81,30 +88,30 @@ fn par_quicksort<T: Ord + std::marker::Send>(slice: &mut [T]) {
|
||||
}
|
||||
|
||||
let pivot = partition(slice, choose_pivot(slice));
|
||||
let (left_slice, right_slice) = slice.split_at_mut(pivot);
|
||||
let (left_slice, right_slice) =
|
||||
slice.split_at_mut(pivot);
|
||||
let right_slice = &mut right_slice[1..]; // want to exclude pivot
|
||||
|
||||
join(|| quicksort(left_slice), || quicksort(right_slice));
|
||||
join(
|
||||
|| quicksort(left_slice),
|
||||
|| quicksort(right_slice),
|
||||
);
|
||||
}
|
||||
|
||||
use rand::distributions::{Distribution, Uniform};
|
||||
use rand::prelude::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
fn main() {
|
||||
let mut s: Vec<i32> = Uniform::from(0..1_000_000_000)
|
||||
.sample_iter(&mut thread_rng())
|
||||
.take(100_000)
|
||||
.collect();
|
||||
let mut s = get_bench_vec();
|
||||
|
||||
quicksort(&mut s);
|
||||
par_quicksort(&mut s);
|
||||
}
|
||||
|
||||
extern crate test;
|
||||
use test::Bencher;
|
||||
fn get_bench_vec() -> Vec<i32> {
|
||||
let s = Uniform::from(0..1_000_000_000)
|
||||
.sample_iter(&mut thread_rng())
|
||||
.take(500_000)
|
||||
.collect();
|
||||
let mut s = (0..20000000).collect::<Vec<i32>>();
|
||||
s.shuffle(&mut thread_rng());
|
||||
return s;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user