思路
计数排序是不用比较的排序 是计算数组里的数各自有多少个 在对应的数组的位置记多少 所以计数排序适用于小范围的数的排序
例如:
一个公司的员工年龄数组arr[] 然遍历一遍数组 把每个年龄的个数记在另一个数组coutArray[]上 比如35岁有5个 则coutArray[35]==5 然后再把coutarry数组记录的数传到sortedarray数组上 比如coutarray[35]==5则传5个35到sortearray数组上(sortesArray[index++]=i;)
public static void countsort(int arr[]){
//找出数组里面的最大数
int max=arr[0];
for (int i=1;i<arr.length;i++){
max=Math.max(max,arr[i]);
}
//生成可以计数的数组
int coutArray[]=new int[max+1];
//把数组的数记在生成数组上
for (int i=0;i<arr.length;i++){
coutArray[arr[i]]++;
}
int index=0;
int sortesArray[]=new int[arr.length];
for (int i=0;i<coutArray.length;i++){
if (coutArray[i]!=0){
//遍历j次 j是i位置coutarray数组上的值
for (int j=0;j<coutArray[i];j++){
sortesArray[index++]=i;
}
}
}
for (int i=0;i<sortesArray.length;i++){
arr[i]=sortesArray[i];
}
}