定义
前提是确定了取值范围有限的数组,利用数组下标来确定元素的正确位置
性能分析
时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
O(n+k) | O(n+k) | O(n+k) | O(k) | 稳定 |
局限性
当数列最大和最小值差距过大时,并不适合做计数排序
当数列元素不是整数时,也不适合用计数排序
代码演示
public static void CountingSort(int[] array){ int maxValue = GetMaxValue(array); int bucketLen = maxValue + 1; int[] bucket = new int[bucketLen]; for (int value:array) { bucket[value]++; } int index = 0 ; for (int i = 0; i < bucketLen; i++) { while(bucket[i] > 0){ array[index++] = i; bucket[i]--; } } } public static int GetMaxValue(int[] array){ int maxValue = array[0]; for (int i = 0; i < array.length; i++) { if(maxValue < array[i]){ maxValue = array[i]; } } return maxValue; } public static void main(String[] args) { int arr[]={4,4,6,5,3,2,8,1,9,3,5,6,7,12,23,34,21,22,14,19}; CountingSort(arr); System.out.println(Arrays.toString(arr)); }