1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
2. 时间复杂度:O(MAX(N,范围))
3. 空间复杂度:O(范围)
4. 稳定性:稳定
计数排序,首先得知道你的元素最大值,如果想要优化,那得到最小元素也是必须的;
计数排序就像给乱序扑克排序一样:你手里的牌大小是多少,就放在对应下标的位置上,这个位置上就多了一张牌,还有一张就在放一张,以此类推;
而我们把这个能放牌的桌子,用了一个数组表示,就像52牌我只需要十三个位置一样;每个位置放四张;放好之后不就已经排序好了吗?只是扑克牌每个位置都是四张罢了;如果缺个几张牌,其结果也是一样;
关于优化 则是对tmpArray数组的优化,考虑如果给你 最小99 最大 100;如果没有最小值,你是不是就要创建101大小的数组;
而有最小值,就可以避免这个尴尬;
代码入下
public static void main(String[] args) {
int[] array = new int[]{2,3,4,5,5,6,5,5};
sort(array,6,2);//最大 最小值
}
private static void sort(int[] array, int max, int min){
int[] tmpArray = new int[max-min+1];
for (int i1 : array) {
tmpArray[i1-min]++;
}
for(int i = 0; i < max-min+1; i++){
for(int j = tmpArray[i]; j > 0; j--){
System.out.println(min+i);
}
}
}