计数排序笔记
Posted 小闲笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计数排序笔记相关的知识,希望对你有一定的参考价值。
排序算法有很多种,接下来介绍三种非比较排序,今天记录计数排序的学习过程,
先看定义:
计数排序假设n个输入元素中的每一个都是介于0到k之间的整数(k为某个整数),其基本思想是:对于每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以吧x直接放到它在最终输出数组中的位置上,例如,如果有17个元素小于x,则x就属于第18个输出位置
第一步:扫描待排序的数组arr[n],使用计数数组count[max-min],对arr[n]中的出现的元素计数。
第二步:扫描计数数组count[],还原arr[],排序结束
例如有待排序的数组
arr={1,7,5,5,7,2,9,4,4,2,6,2};
第一步扫描 并计数
count结果如下
count | 0 | 1 | 2 | 3 | ....... | 7 | 8 | 9 |
次数 | 0 | 1 | 3 | 0 | 2 | 0 | 1 |
第二步还原arr[]数组
arr={1,2,2,2,4,4,5,5,6,7,7,9}
下面是从网上找来的图辅助理解
下面是一个简单实现:
int[] arr={1,7,5,5,7,2,9,4,4,2,6,2};
int[] count=new int[10]; //初始化一个数组
for(int i=0;i<ints.length;i++){
count[ints[i]]+=1;//对原数据元素出现的次数 计数
}
int index=0;
for(int i=0;i<count.length;i++){
while (count[i]-->0){
ints[index++]=i; //按每个出现的次数,将数组还原
}
}
for(int i:ints){
System.out.print(i+" ");
}
输出结果:
以上是关于计数排序笔记的主要内容,如果未能解决你的问题,请参考以下文章