Translate

martes, 13 de febrero de 2024

Quicksort en Rust


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));

}