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}