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

好程序员Java学习路线分享5分钟了解计数排序,前言:计数排序是一种非比较性质的排序算法,计数排序借助辅助空间记录每一个元素出现的次数,根据次数肯定每个元素最终的位置。程序员

计数排序思想介绍

1根据待排序数组,获取最大值和最小值,获得全部元素的范围 [m,n]算法

2新建一个长度为n-m+1的临时数组数组

3遍历待排序数组,元素的值-m做为临时数组下标,该下标位置记录元素出现次数学习

4遍历结束,临时数组就存储了每一个元素出现的次数spa

5根据该临时数组,最终获得排序后元素blog

 

算法说明:排序

待排序数据:12,4,6,7,4,6it

数据范围为[4,12],临时数组长度为12-4+1=9遍历

最终获得排序后序列:4,4,6,6,7,12程序

计数排序的代码实现

1. public static void sortCount(int[] arr) {  

2.         int max = 0;  

3.         int min = 0;  

4.         // 获取数组的最大值和最小值  

5.         for(int i = 0; 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 = 0; i < len; i++) {  

14.             temp[arr[i] - min] += 1;  

15.         }  

16.         // 将临时数组中数据依次放回原数组  

17.         for(int i = 0, index = 0; i < temp.length; i++) {  

18.             int item = temp[i];  

19.             while(item-- != 0) {  

20.                 arr[index++] = i + min;  

21.             }  

22.         }  

23.     }  

总结

计数排序须要占用额外的存储空间,它比较适用于数据比较集中的状况。

相关文章
相关标签/搜索