计数排序
排序思想
桶排序的一种实现方式。适用范围:数据量大在一定范围内的数据。
①确定数据的范围:如【0-9】
②根据数据的范围创建数组
核心代码
/**
* 计数排序
* @param arr 数据
* @param len 数组长度
*/
private static void countSort(int[] arr, int len) {
//创建数组范围数组
int[] count = new int[10];
//创建临时数组
int[] temp = new int[len];
//将数据存入桶中
for (int i = 0; i < len; i++) {
count[arr[i]]++;
}
//确定数据的位置
for (int i = 1; i < count.length; i++) {
count[i] = count[i] + count[i-1];
}
//将数据存入临时数组 保证稳定性
for (int j = len-1; j >= 0; j--) {
temp[--count[arr[j]]] = arr[j];
}
System.arraycopy(temp,0,arr,0,temp.length);
}
图解
特点
平均时间复杂度O(n+k),最坏时间复杂度O(n+k),最好时间复杂度O(n+k)。空间复杂度O(n+k),稳定。