added impl for radix sort need to debug
This commit is contained in:
parent
3afd44df2e
commit
37c7f922ce
1 changed files with 40 additions and 40 deletions
|
|
@ -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)
|
||||||
}
|
// }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue