algorithmica 0.1.10

Rust Algorithms
Documentation
use std::cmp::{Ord, Ordering};

pub fn sort<T>(list: &mut [T])
where
    T: Ord,
{
    let n = list.len();
    for i in 0..n - 1 {
        let mut min_index = i;
        for j in i + 1..n {
            if list[min_index] > list[j] {
                min_index = j;
            }
        }
        if i != min_index {
            list.swap(i, min_index);
        }
    }
}

pub fn sort_by<T, F>(list: &mut [T], f: F)
where
    T: Ord,
    F: Fn(&T, &T) -> Ordering,
{
    let n = list.len();
    for i in 0..n - 1 {
        let mut min_index = i;
        for j in i + 1..n {
            if let Ordering::Greater = f(&list[min_index], &list[j]) {
                min_index = j;
            }
        }
        if i != min_index {
            list.swap(i, min_index);
        }
    }
}