Skip to main content

Algod/sorting/
selection_sort.rs

1pub fn selection_sort<T: Ord>(arr: &mut [T]) {
2    let len = arr.len();
3    for left in 0..len {
4        let mut smallest = left;
5        for right in (left + 1)..len {
6            if arr[right] < arr[smallest] {
7                smallest = right;
8            }
9        }
10        arr.swap(smallest, left);
11    }
12}
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17
18    #[test]
19    fn basic() {
20        let mut res = vec!["d", "a", "c", "b"];
21        selection_sort(&mut res);
22        assert_eq!(res, vec!["a", "b", "c", "d"]);
23    }
24
25    #[test]
26    fn empty() {
27        let mut res = Vec::<u8>::new();
28        selection_sort(&mut res);
29        assert_eq!(res, vec![]);
30    }
31
32    #[test]
33    fn one_element() {
34        let mut res = vec!["a"];
35        selection_sort(&mut res);
36        assert_eq!(res, vec!["a"]);
37    }
38
39    #[test]
40    fn pre_sorted() {
41        let mut res = vec!["a", "b", "c"];
42        selection_sort(&mut res);
43        assert_eq!(res, vec!["a", "b", "c"]);
44    }
45}