アルゴリズム的にはこれが一番簡単。それでこれが早いのか。。
fn quick_sort(data: Vec<i32>) -> Vec<i32> { if data.len() <= 1{ return data; } let pivot = data[0]; let mut left: Vec<i32> = Vec::new(); let mut right: Vec<i32> = Vec::new(); let mut result: Vec<i32> = Vec::new(); let mut same = 0; for i in data { if i < pivot { left.push(i); } else if i > pivot { right.push(i); } else { same += 1; } } left = quick_sort(left); right = quick_sort(right); result.append(&mut left); if same != 0 { for i in 0..same { result.push(pivot); } } result.append(&mut right); return result; } fn main() { let mut data = vec![6, 15, 4, 2, 8, 5, 11, 9, 7, 13]; println!("{:?}", quick_sort(data)); }
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.37s
Running `target/debug/rust`
[2, 4, 5, 6, 7, 8, 9, 11, 13, 15]