好程序员Java学习路线分享5分钟了解计数排序

本文深入讲解计数排序算法,一种非比较性质的排序方法。通过获取数据范围,使用辅助数组记录元素频次,最终实现排序。适用于数据集中的元素值相对集中的场景。

好程序员 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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值