rust-algorithms:3-桶排序

fn bucket_sort(arr: &[usize]) -> std::vec::Vec<usize> {
    if arr.is_empty() {
        return vec![];
    }
    let len = arr.len();
    let max = arr.iter().max().unwrap();
    let mut buckets = vec![vec![]; len + 1];
    for vp in arr.iter() {
        let value = *vp;
        let idx = len * value / max;
        // 分桶规则一定要定好,对于每个桶一定保证
        // x < y && max(x) < min(y) 
        buckets[idx].push(value);
    }
    // 桶内排序
    for bucket in buckets.iter_mut() {
        super::insertion_sort::insertion_sort(bucket);
    }
    let mut res = vec![];
    // 直接收集
    for bucket in buckets.iter() {
        for vp in bucket {
            res.push(*vp);
        }
    }
    res
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!