sort_alogorithms/sort/
radix_sort.rs

1
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}