Algod/sorting/
selection_sort.rs1pub 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}