在众多排序算法中,Rust计数排序是一种非常高效的非比较型整数排序算法。它适用于待排序元素为较小整数范围的情况,时间复杂度可达到线性级别 O(n + k),其中 n 是元素个数,k 是数据范围。本文将手把手教你用 Rust 实现计数排序,即使你是编程小白也能轻松掌握!
计数排序的核心思想是:统计每个元素出现的次数,然后根据这些统计信息直接确定每个元素在输出数组中的位置。它不是基于元素之间的比较,因此不受 O(n log n) 的下限限制。
不过要注意:计数排序只适用于整数(或可以映射为整数的数据),且数据范围不能太大(否则会浪费大量内存)。它是稳定排序算法的一种,意味着相等元素的相对顺序不会改变。
下面我们一步步用 Rust 实现计数排序:
下面是完整的、可运行的 Rust 计数排序实现:
fn counting_sort(arr: &Vec<i32>) -> Vec<i32> { // 处理空数组 if arr.is_empty() { return Vec::new(); } // 找出最大值和最小值 let &min = arr.iter().min().unwrap(); let &max = arr.iter().max().unwrap(); // 创建计数数组,大小为 max - min + 1 let mut count = vec![0; (max - min + 1) as usize]; // 统计每个元素出现的次数 for &num in arr { count[(num - min) as usize] += 1; } // 构建排序后的结果数组 let mut result = Vec::new(); for (i, &c) in count.iter().enumerate() { for _ in 0..c { result.push((i as i32 + min) as i32); } } result}fn main() { let data = vec![4, 2, 2, 8, 3, 3, 1]; let sorted = counting_sort(&data); println!("原始数组: {:?}", data); println!("排序后数组: {:?}", sorted);}
让我们逐段分析上面的代码:
min 和 max 的获取:使用 Rust 的迭代器方法 .min() 和 .max() 快速找到边界值。count 数组:大小为 max - min + 1,这样即使有负数也能正确处理(通过偏移量 min)。min 后作为索引,增加对应计数。计数排序非常适合以下场景:
但也有明显局限:
通过本教程,你已经掌握了如何用 Rust 实现高效的计数排序算法。这种稳定排序算法虽然应用场景有限,但在合适的情况下能提供卓越的性能。希望这篇Rust排序教程对你有所帮助!
记住:理解算法原理比死记代码更重要。尝试修改上面的代码,处理负数、优化内存使用,或者将其封装成通用函数,都是很好的练习方式。
Happy Coding with Rust!
本文由主机测评网于2025-12-11发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126166.html