sort_alogorithms/sort/
radix_sort.rs1
2pub trait RadixSort {
3 fn get_identifier(&self) -> i32;
4}
5
6pub fn radix_sort<T>(arr: &mut Vec<T>)
7where
8 T: Copy + Clone + RadixSort,
9{
10 let mut bigger: i32 = arr
11 .iter()
12 .max_by_key(|a| a.get_identifier())
13 .unwrap()
14 .get_identifier();
15 let mut exp = 1;
16 let len = arr.len();
17 let mut arr2 = arr.clone();
18
19 while bigger / exp > 0 {
20 let mut bucket = [0; 10];
21 for i in arr2.clone() {
22 bucket[((i.get_identifier() / exp) % len as i32) as usize] += 1;
23 }
24 for i in 1..len {
25 bucket[i] += bucket[i - 1];
26 }
27 for i in (0..len).rev() {
28 let pos = bucket[((arr2[i].get_identifier() / exp) % len as i32) as usize] - 1;
29 arr[pos] = arr2[i];
30 }
31
32 exp *= len as i32;
33 }
34}