↑Programmieren in Rust
fn bubble_sort<T: Ord>(a: &mut [T]) { let n = a.len(); for _ in 0..n { for i in 0..n-1 { if a[i+1] < a[i] {a.swap(i, i+1);} } } } fn main() { let mut a = [3, 1, 4, 2]; bubble_sort(&mut a); println!("{:?}", a); }
fn qsort<T: Ord + Clone>(a: &[T]) -> Vec<T> { if a.is_empty() {return vec![];} let l: Vec<T> = a[1..].iter().cloned().filter(|&x| x < a[0]).collect(); let r: Vec<T> = a[1..].iter().cloned().filter(|&x| x >= a[0]).collect(); [qsort(&l), qsort(&r)].join(&a[0]) }
fn qsort<T: Ord + Clone>(a: &[T]) -> Vec<T> { if a.is_empty() {return vec![];} let (l, r): (Vec<T>, Vec<T>) = a[1..].iter().cloned().partition(|&x| x < a[0]); [qsort(&l), qsort(&r)].join(&a[0]) }
fn partition<T: Ord>(a: &mut [T], k: usize) -> usize { let pivot = a.len() - 1; a.swap(k, pivot); let mut i = 0; for j in 0..pivot { if a[j] <= a[pivot] {a.swap(i, j); i += 1;} } a.swap(i, pivot); i } fn qsort<T: Ord>(a: &mut [T]) { if a.len() < 2 {return;} let i = partition(a,0); qsort(&mut a[..i]); qsort(&mut a[i+1..]); }