Un Algoritmo que me gusta mucho es el quicksort, porque es un algoritmo por demás claro. Ya he escrito lo fácil que es implementarlo en haskell y lisp
Ahora le toca a Rust. Básicamente el algoritmo toma un pivot y agrupa los menores del pivot al principio y los mayores al final y aplica quicksort a estos 2 grupos. Y si la lista es vacia o tiene un elemento, ya esta ordenada.
Vamos al código:
fn quick_sort<T: Ord>(mut arr: Vec<T>) -> Vec<T> {
if arr.len() <= 1 {
return arr;
}
let pivot = arr.remove(0);
let mut left = vec![];
let mut right = vec![];
arr.into_iter().for_each(|item| {
if item <= pivot {
left.push(item);
} else {
right.push(item);
}
});
let mut sorted_left = quick_sort(left);
sorted_left.push(pivot);
sorted_left.append(&mut quick_sort(right));
sorted_left
}
Y lo probamos en el main:
fn main() {
let arr = vec![10, 80, 30, 90, 40, 50, 70];
println!("{:?}", arr);
println!("{:?}", quick_sort(arr));
}