commit 94f1da1e3d20e9fbfbc0fd82eef5415552b8be40 Author: Nils Pukropp <nils@narl.io> Date: Sat Jul 27 15:53:18 2024 +0200 added selection sort diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..9af9b14 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "algodat" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..c814ec5 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "algodat" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..263e840 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,29 @@ +#![feature(is_sorted)] + +pub fn selection_sort<T: PartialOrd>(arr: &mut Vec<T>){ + let mut index: usize = 0; + while let Some(mut smallest) = arr.get(index) { + let mut smallest_index = index; + for (item_index, item) in arr[index..].iter().enumerate() { + if smallest > item { + smallest = item; + smallest_index = item_index + index; + } + } + arr.swap(index, smallest_index); + index += 1; + } +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let mut v = vec![2, 3, 1, 7, 21, 1337, 420]; + selection_sort(&mut v); + assert!(dbg!(v).is_sorted()); + } +}