好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
  • 客服QQ
  • 官方微信

    好程序员

    专注高端IT职业培训

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

[复制链接]
698 0
叶子老师 发表于 2019-8-1 11:13:35 | 只看该作者 |只看大图 |阅读模式 打印 上一主题 下一主题
好程序员Java学习路线分享5分钟了解计数排序,前言计数排序是一种非比较性质的排序算法,计数排序借助辅助空间记录每个元素出现的次数,根据次数确定每一个元素最终的位置。
计数排序思想介绍
1根据待排序数组,获取最大值和最小值,得到所有元素的范围 [m,n]
2新建一个长度为n-m+1的临时数组
3遍历待排序数组,元素的值-m作为临时数组下标,该下标位置记录元素出现次数
4遍历结束,临时数组就存储了每个元素出现的次数
5根据该临时数组,最终得到排序后元素
算法说明:
待排序数据:1246746
数据范围为[4,12],临时数组长度为12-4+1=9
最终得到排序后序列:4466712
计数排序的代码实现
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);  
7.             min = Math.min(min, arr);  
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 - min] += 1;  
15.         }  
16.         // 将临时数组中数据依次放回原数组  
17.         for(int i = 0, index = 0; i < temp.length; i++) {  
18.             int item = temp;  
19.             while(item-- != 0) {  
20.                 arr[index++] = i + min;  
21.             }  
22.         }  
23.     }  
总结
计数排序需要占用额外的存储空间,它比较适用于数据比较集中的情况。
好程序员Java培训官网:http://www.mygod78.com/

精彩内容,一键分享给更多人!
收藏
收藏0
转播
转播
分享
淘帖0
支持
支持0
反对
反对0
您需要登录后才可以回帖

本版积分规则

关注我们
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技湖南福彩网 。All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启

湖南福彩网 上海福彩网 江苏福彩网 江苏福彩网 辽宁福彩网 西藏福彩网 上海福彩网 辽宁福彩网 辽宁福彩网 上海福彩网