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());
+    }
+}