首页 > 代码库 > 算法——排序之计数排序
算法——排序之计数排序
最近想到算法导论中的计数排序,看看理解的怎么样试着讲讲自己的理解。
1、思想:
计数排序 是 线性时间的 排序算法,时间复杂度为O(n),虽然有一定的局限性。但是还是很好的一种算法。
用2个数组进行额外的存储信息,数组 c[ ] 是对 数据中值相同的 记录下来,以便后面查阅;b[ ]是输出的有序数组,再将有序的数组输出。
2、范围:
计数排序是针对 在 一定取值范围 的 整数 数据。比如:a[ ]中 a[ i ]∈( 0 , 10 )。
3、代码:
<span style="font-size:14px;">public class CountingSort { public static int[] sort(int []a,int k){ // a 是输入数组 k 是可取的最大值 即取值在 (0,k)范围内 int num = a.length; int []b = new int[num]; // 输出的有序数组 int []c = new int[k]; //临时计数数组 for(int i=0;i<num;i++){ //初始化数组 b[i]=0; c[i]=0; } for(int i=0;i<num;i++){ //对 a 中值都为 a[i] 的数据进行计数 并记录c[a[i]] 中,如 c[5] = 3 就表示 a[]中有 3个 值为 5 的数据。 c[a[i]] +=1; } for(int i=1;i<k;i++){ //对整体进行计数累加 c[i]+=c[i-1]; } for(int i=num-1;i>=0;i--){ //对a[] 中数据倒序访问进行赋值到 b[]中 这样a[i]就会到它排序后应该在的位置了 b[--c[a[i]]] = a[i]; } return b; } public static void main(String[] args) { int []a = {2,5,7,4,9,5,7,2,6,0}; for(int i:a){ System.out.print(i + " "); } System.out.println(); a = sort(a,10); for(int i:a){ System.out.print(i+" "); } } }</span>这样就会看到 原本的数据 已经排好序了……
有问题,欢迎讨论……
算法——排序之计数排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。