added impl for radix sort need to debug

This commit is contained in:
specCon18 2024-05-25 19:48:22 -04:00
parent 3afd44df2e
commit 37c7f922ce

View file

@ -1,46 +1,46 @@
use crate::data_structures::stack::Stack; // use crate::data_structures::stack::Stack;
pub fn radix_sort(arr: &[u64]) -> Vec<u64> { // pub fn radix_sort(arr: &[u64]) -> Vec<u64> {
let mut buckets: [Stack<u64>; 10] = [ // let mut buckets: [Stack<u64>; 10] = [
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
Stack::new(), // Stack::new(),
]; // ];
let mut sort_vec = arr.to_vec(); // let mut sort_vec = arr.to_vec();
let largest_place_value = get_largest_place(arr); // let largest_place_value = get_largest_place(arr);
for counter in 0..largest_place_value { // for counter in 0..largest_place_value {
for num in &sort_vec { // for num in &sort_vec {
let digit = get_digit(*num, counter as usize); // let digit = get_digit(*num, counter as usize);
buckets[digit].push(*num); // buckets[digit].push(*num);
} // }
let mut index = 0; // let mut index = 0;
for stack in &mut buckets { // for stack in &mut buckets {
while let Some(value) = stack.pop() { // while let Some(value) = stack.pop() {
sort_vec[index] = value; // sort_vec[index] = value;
index += 1; // index += 1;
} // }
} // }
} // }
sort_vec // sort_vec
} // }
fn get_digit(num: u64, place: usize) -> usize { // fn get_digit(num: u64, place: usize) -> usize {
(num / 10u64.pow(place as u32)) as usize % 10 // (num / 10u64.pow(place as u32)) as usize % 10
} // }
fn get_largest_place(arr: &[u64]) -> usize { // fn get_largest_place(arr: &[u64]) -> usize {
arr.iter() // arr.iter()
.map(|&num| (num as f64).log(10.0).ceil() as usize) // .map(|&num| (num as f64).log(10.0).ceil() as usize)
.max() // .max()
.unwrap_or(0) // .unwrap_or(0)
} // }