From 8bd2b121034b0fba519aee09a0f416bf5aba4420 Mon Sep 17 00:00:00 2001 From: polsevev Date: Mon, 7 Nov 2022 01:44:35 +0100 Subject: [PATCH] added some more sorting algos --- src/Algorithm.rs | 26 ++++++++++++++++++++++++++ src/GuiHookVec.rs | 12 ++++++++++++ src/main.rs | 4 ++-- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/Algorithm.rs b/src/Algorithm.rs index 64f320e..ca0f16b 100644 --- a/src/Algorithm.rs +++ b/src/Algorithm.rs @@ -48,4 +48,30 @@ impl Algorithm { } } + pub fn bubbleSort<'a>(list: &'a mut GuiVec) -> impl Generator +'a { + move || { + let n = list.len(); + for i in 0..n { + for j in 0..(n - i - 1) { + if list.lessThan(j + 1, j) { + yield list.swap(j, j + 1); + } + } + } + } + } + + pub fn bogoSort<'a>(list: &'a mut GuiVec) -> impl Generator +'a{ + move || { + loop{ + yield list.clone(); + if list.isSorted() { + break; + } + list.randomize(); + } + + } + } + } \ No newline at end of file diff --git a/src/GuiHookVec.rs b/src/GuiHookVec.rs index ed725a1..0a75558 100644 --- a/src/GuiHookVec.rs +++ b/src/GuiHookVec.rs @@ -86,5 +86,17 @@ impl GuiVec{ self.comps += 1; return self.get(a).position < self.get(b).position } + pub fn isSorted(&mut self) -> bool{ + self.reads += self.len() as i32; + let mut prev = 0; + for bar in self.list.iter() { + if bar.position < prev{ + return false; + }else{ + prev = bar.position; + } + } + true + } } diff --git a/src/main.rs b/src/main.rs index 61e1924..b48beb5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,11 +16,11 @@ use std::ops::{Generator, GeneratorState}; const BAR_WIDTH:f32 = 10.0; #[macroquad::main("BeepSort")] async fn main() { - let mut gui_vec = GuiVec::new(50); + let mut gui_vec = GuiVec::new(5); gui_vec.randomize(); let mut lasttime:f64 = 0.; let mut holder = gui_vec.clone(); - let mut generator = Algorithm::Algorithm::insertSort(&mut gui_vec); + let mut generator = Algorithm::Algorithm::bogoSort(&mut gui_vec); let mut finished = false; let timeout = 0.000001;