From fc48949ad9db9723dc6d6897fba95960a99ee6a9 Mon Sep 17 00:00:00 2001 From: Daniel Heras Quesada Date: Sat, 16 Nov 2024 19:23:05 +0100 Subject: [PATCH] feat(quicksort): basic algorithm implemented --- src/exercises/medium_difficulty.rs | 32 +++++++++++++++++++++++++++++- src/exercises/mod.rs | 6 ++++++ src/main.rs | 8 ++++---- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/exercises/medium_difficulty.rs b/src/exercises/medium_difficulty.rs index 0415208..d5bd0e7 100644 --- a/src/exercises/medium_difficulty.rs +++ b/src/exercises/medium_difficulty.rs @@ -8,7 +8,6 @@ pub fn longest_palindrome(value: &str) -> String { break; } if let Some(slice) = value.get(i..(i + pal_size - 1)) { - // let reverted_slice = slice.chars().rev().collect::(); // if string was mutable, we count use .reserve() let reverted_slice = slice.chars().rev().collect::(); if slice == reverted_slice { @@ -21,3 +20,34 @@ pub fn longest_palindrome(value: &str) -> String { lp } + +pub fn quick_sort(list: Vec) -> Vec +where + T: PartialOrd + Copy, +{ + if list.is_empty() { + return list; + } + let mut pivot_list = vec![list[0]]; + let pivot = pivot_list[0]; + // arrange + let mut left_list: Vec = Vec::new(); + let mut right_list: Vec = Vec::new(); + for index in 1..list.len() { + let element = list[index]; + if element > pivot { + right_list.push(element); + } else if element < pivot { + left_list.push(element); + } else { + pivot_list.push(element); + } + } + + left_list = quick_sort(left_list); + right_list = quick_sort(right_list); + left_list.append(&mut pivot_list); + left_list.append(&mut right_list); + + left_list +} diff --git a/src/exercises/mod.rs b/src/exercises/mod.rs index 97746d4..ad6038e 100644 --- a/src/exercises/mod.rs +++ b/src/exercises/mod.rs @@ -30,4 +30,10 @@ pub fn run_easy() { let bubled_list = easy_difficulty::bubble_sort(list); println!("The original list sorted is {:?}", bubled_list); + + let long_list = vec![ + 5, 1, 8, 20, 4, 15, 6, 7, 1, 4, 23, 9, 23, 5, 7, 7, 8, 0, 12, 4, 56, 18, 47, 23, + ]; + let sorted_list = medium_difficulty::quick_sort(long_list); + println!("The sorted list is: {:?}", sorted_list); } diff --git a/src/main.rs b/src/main.rs index 2f42dd4..e92736a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,8 +14,8 @@ // mod controlflow; // mod traits; // mod str_types; -mod functions; -// mod exercises; +// mod functions; +mod exercises; fn main() { // helloworld::hello_world_module(); @@ -27,6 +27,6 @@ fn main() { // controlflow::control_flow_module(); //traits::traits_exercise(); // str_types::str_types_module(); - functions::functions_module(); - // exercises::run_easy(); + // functions::functions_module(); + exercises::run_easy(); }