pub fn selection_sort(arr: &mut [T]) { let len = arr.len(); for left in 0..len { let mut smallest = left; for right in (left + 1)..len { if arr[right] < arr[smallest] { smallest = right; } } arr.swap(smallest, left); } } #[cfg(test)] mod tests { use super::*; #[test] fn basic() { let mut res = vec!["d", "a", "c", "b"]; selection_sort(&mut res); assert_eq!(res, vec!["a", "b", "c", "d"]); } #[test] fn empty() { let mut res = Vec::::new(); selection_sort(&mut res); assert_eq!(res, vec![]); } #[test] fn one_element() { let mut res = vec!["a"]; selection_sort(&mut res); assert_eq!(res, vec!["a"]); } #[test] fn pre_sorted() { let mut res = vec!["a", "b", "c"]; selection_sort(&mut res); assert_eq!(res, vec!["a", "b", "c"]); } }