计数排序适用于整数排序,且数字相对集中的数组
排序步骤:
1.先找出数组a([2,9,3,5,6,5])中的最大值max(9)和最小值min(2)
2.创建一个大小是max-min+1(8)大小的数组c(加1是因为9-2可能有8个不同的数)用于存放a中每个数出现的次数((c的下标+min)就表示a中的某个数,在该下标位置存放的就是它的出现次数)
3.遍历数组a,找出min+i出现的次数,b[i]中存放min+i这个数出现的次数(c=[1,1,0,2,1,0,0,1])。
4.将a数组按照c数组的顺序进行重新排序
上代码
public static void countSort(int[] a) {
int max=-10000000;
int min=10000000;
//找出数组a的最大值和最小值
for(int i=0;i<a.length;i++) {
if(a[i]>max) {
max=a[i];
}
if(a[i]<min) {
min=a[i];
}
}
int[] c=new int[max-min+1];
//将a中每个数num的出现的次数存放在数组c中
//c的下标+min表示该数num
for(int i=0;i<c.length;i++) {
int temp=min+i;
int count=0;
for(int j=0;j<a.length;j++) {
if(a[j]==temp) {
count++;
}
}
c[i]=count;
}
//最后一步将数组a按照c重新排序
int k=0;
for(int m=0;m<c.length;m++) {
for(int n=0;n<c[m];n++) {
a[k]=min+m;
k++;
}
}
}