From 94f1da1e3d20e9fbfbc0fd82eef5415552b8be40 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sat, 27 Jul 2024 15:53:18 +0200 Subject: [PATCH] added selection sort --- .gitignore | 1 + Cargo.lock | 7 +++++++ Cargo.toml | 6 ++++++ src/lib.rs | 29 +++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/lib.rs 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(arr: &mut Vec){ + 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()); + } +}