- 计数排序简介
- 实现(java)
- 复杂度和稳定性
1.计数排序简介
非比较排序,空间换时间, 开辟额外的空间, 统计每个元素出现的次数, 从而确定位置, 一种特殊的桶排序
2.实现(java)
public class CountSort {
public static void main(String[] args) {
int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19};
System.out.println("原数组: " + Arrays.toString(arr));
sortArr(arr);
System.out.println("排序后: " + Arrays.toString(arr));
}
public static void sortArr(int[] arr) {
int max = arr[0];
int min = arr[0];
for(int i = 0; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
if(min > arr[i]) {
min = arr[i];
}
}
int[] countArr = new int[max - min + 1];
int[] tmpArr = new int[arr.length];
for(int i = 0; i < arr.length; i++) {
countArr[arr[i] - min]++;
}
for(int i = 1; i < countArr.length; i++) {
countArr[i] += countArr[i - 1];
}
for(int i = arr.length - 1; i >= 0; i--) {
int num = countArr[arr[i] - min];
tmpArr[num - 1] = arr[i];
countArr[arr[i] - min]--;
}
for(int i = 0; i < tmpArr.length; i++) {
arr[i] = tmpArr[i];
}
}
}
3.复杂度和稳定性
排序算法 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
计数排序 | O(n+k) | O(n+k) | O(n+k) | O(n+k) | 稳定 |