pub fn sort(data:&mut Vec<usize>){
let n = data.len();
let len = get_max_len(data);
for i in 0..len{
let mut d = 1;
for _j in 0..i{
d *= 10;
}
let mut v = Vec::new();
for _j in 0..10{
v.push(Vec::new());
}
for j in 0..n{
let da = get_digit_of_d(data[j],d);
v[da].push(data[j]);
}
for j in 0..n{
for vi in 0..v.len(){
if v[vi].len() == 0{
continue;
}
data[j] = v[vi].remove(0);
break;
}
}
}
}
fn get_digit_of_d(data:usize,d:usize)->usize{
(data / d) % 10
}
fn get_len(data:usize)->usize{
let mut d = data;
let mut l = 0;
loop{
l += 1;
d /= 10;
if d == 0{
break;
}
}
l
}
fn get_max_len(data:&Vec<usize>)->usize{
let mut l = 0;
for d in data{
let dl = get_len(*d);
if dl > l{
l = dl;
}
}
l
}