1 计数排序
计数排序是一种非基于比较的排序算法,其空间复杂度和时间复杂度均为 O(n+k),其中 k 是整数的范围。基于比较的排序算法时间复杂度最小是 O(nlogn)的。
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
//计数排序
//时间复杂度为O(N)
public class Code01_CountSort {
// only for 0~200 value
// 计数排序,a 是数组,假设数组中存储的都是非负整数。
public static void countSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int max = Integer.MIN_VALUE;
//查找数组中的最大值
for (int i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
}
//创建一个最大值加1的数组
int[] bucket = new int[max + 1];
//计算待排序的每个值的个数,放入数组bucket 中
for (int i = 0; i