原理:
计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于1954年由 Harold H. Seward 提出。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。
图解:
代码实现:
代码git地址
https://github.com/baochunhai/data-structure-algorithms.git
/**
* 计数排序,非比较排序
* 对样本内容有要求
* @author Administrator
*/
public class CountingSort {
public static void main(String[] args) {
int[] arr = SortUtil.randomArr(10);
SortUtil.printArr(arr);
countingSort(arr,10);
SortUtil.printArr(arr);
}
public static void countingSort(int[] arr,int k){
int[] help = new int[k];
for (int i = 0; i < arr.length ; i++) {
help[arr[i]] +=1;
}
SortUtil.printArr(help);
int count=0;
for (int i = 0; i < help.length ; i++) {
while (help[i]>0){
arr[count++] = i;
help[i]--;
}
}
}
}
时间复杂度分析:
稳定性:
不稳定。