好程序员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. }
计数排序须要占用额外的存储空间,它比较适用于数据比较集中的状况。