sorts/
selection_sort.rs

1/// Sorts a slice in-place using
2/// [selction sort](https://en.wikipedia.org/wiki/Selection_sort).
3///
4/// # Examples
5/// ```
6/// let mut vec = vec![56, 32, 78, 16];
7/// sorts::insertion_sort(&mut vec);
8/// assert_eq!(vec, &[16, 32, 56, 78]);
9/// ```
10pub fn selection_sort<T: PartialOrd>(s: &mut [T]) {
11    for i in 0..s.len() {
12        let swap = {
13            let mut min = &s[i];
14            let mut min_index = i;
15            for j in i + 1..s.len() {
16                if s[j] < *min {
17                    min = &s[j];
18                    min_index = j;
19                }
20            }
21            min_index
22        };
23
24        if i != swap {
25            s.swap(i, swap);
26        }
27    }
28}