package interview.silence;
public class CountSort {
/**
* 计数排序算法
* 时间复杂度为O(n+k)的排序算法,n为待排序的个数,k为给定的数的具体范围
* 如果k远大于n,则会造成空间上的极大浪费,以及时间复杂度的没多少降低
* 如果接近,则很节省时间
* @return
*/
public static int[] sort(int[] a,int max){ //max表示最大的数,这个用来表示一个范围
int[] counter = new int[max+1];
for(int i=0;i<a.length;i++){ //计数
counter[a[i]]++;
}
for(int i=1;i<=max;i++){ //统计不大于I的数字的个数
counter[i]+=counter[i-1];
}
int[] result = new int[a.length];
for(int i=0;i<a.length;i++){
result[--counter[a[i]]]=a[i];
}
return result;
}
public static void print(int[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
System.out.println();
}
public static void main(String[] args){
int[] a={3,3,1,6,7,8,4,2};
print(sort(a, 8));
}
}
输出结果是:
1,2,3,3,4,6,7,8,