1:计数排序是非基于比较的排序。
实现:
代码:
public int[] countSort(int[] array) { //1.先找出数据的范围 int max = array[0]; int min = array[0]; for (int i = 0; i < array.length; i++) { if (array[i] > max) { max = array[i]; } if (array[i] < min) { min = array[i]; } } //2.申请新的数组 int[] count = new int[max-min+1];//9-0+1 == 10 //3.遍历数组array for (int i = 0; i < array.length; i++) { count[array[i]-min]++; } //4.遍历数组count 将数据放回array int tmp = 0; for (int i = 0; i < count.length; i++) { while(count[i] > 0 && tmp < array.length) { array[tmp] = i+min; count[i]--; tmp++; } } return array; }
计数排序要知道数据的范围,适合用于集中在某一集合的数据。
时间复杂度:O(n +范围);
空间复杂度:O(范围);
稳定性:稳定的。