好程序员 Java 学习路线分享 5 分钟了解计数排序, 前言 : 计数排序是一种非比较性质的排序算法,计数排序借助辅助空间记录每个元素出现的次数,根据次数确定每一个元素最终的位置。
计数排序思想介绍
1 根据待排序数组,获取最大值和最小值,得到所有元素的范围 [m,n]
2 新建一个长度为 n-m+1 的临时数组
3 遍历待排序数组,元素的值 -m 作为临时数组下标,该下标位置记录元素出现次数
4 遍历结束,临时数组就存储了每个元素出现的次数
5 根据该临时数组,最终得到排序后元素
算法说明:
待排序数据: 12 , 4 , 6 , 7 , 4 , 6
数据范围为 [4,12], 临时数组长度为 12-4+1=9

最终得到排序后序列: 4 , 4 , 6 , 6 , 7 , 12
计数排序的代码实现
1. public static void sortCount( int [] arr) {
2. int max = ;
3. int min = ;
4. // 获取数组的最大值和最小值
5. for ( int i = ; i < arr.length; i++){
6. max = Math.max(max, arr[i]);
7. min = Math.min(min, arr[i]);
8. }
9. int len = arr.length;
10. // 创建临时数组
11. int [] temp = new int [max - min + 1 ];
12. // 计数
13. for ( int i = ; i < len; i++) {
14. temp[arr[i] - min] += 1 ;
15. }
16. // 将临时数组中数据依次放回原数组
17. for ( int i = , index = ; i < temp.length; i++) {
18. int item = temp[i];
19. while (item-- != ) {
20. arr[index++] = i + min;
21. }
22. }
23. }
总结
计数排序需要占用额外的存储空间,它比较适用于数据比较集中的情况。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913892/viewspace-2652472/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69913892/viewspace-2652472/
本文深入讲解计数排序算法,一种非比较性质的排序方法。通过获取数据范围,使用辅助数组记录元素频次,最终实现排序。适用于数据集中的元素值相对集中的场景。
34万+

被折叠的 条评论
为什么被折叠?



