const R: usize = 256;
pub fn sort(src: &mut Vec<&str>, w: usize) {
let n = src.len();
let mut aux = vec![""; n];
for d in (0..w).rev() {
let mut count = [0usize; R + 1];
(0..n).for_each(|i| {
let pos = { src[i].as_bytes()[d] as usize };
count[pos + 1] += 1;
});
for r in 0..R {
count[r + 1] += count[r];
}
(0..n).for_each(|i| {
let pos = src[i].as_bytes()[d] as usize;
aux[count[pos]] = src[i];
count[pos] += 1;
});
(0..n).for_each(|i| {
src[i] = aux[i];
});
}
}
#[cfg(test)]
mod test {
use super::sort;
#[test]
fn test() {
let mut src = vec![
"4pgc938", "2iye230", "3ci0720", "1ick750", "1ohv845", "4jzy524", "1ick750", "3ci0720",
"1ohv845", "1ohv845", "2rla629", "2rla629", "3atw723",
];
sort(&mut src, 7);
for item in src.iter() {
println!("{}", item);
}
}
}