计数排序有一个假设条件,假设:n个输入元素中的每一个都是在0到k之间的一个整数,其中k为某个整数,当k为O(n)的时候,排序的运行时间复杂度是(n)。
C++示例:
#include <iostream>
using namespace std;
/*
计数排序
*/
void countSort(int arrA[], int arrB[], int k, int count) {
int arrC[k+1]; // 用来计数的数组
for (int i = 0; i < count; i++) {
arrC[i] = 0;
}
for (int i = 0; i < count; i++) {
arrC[arrA[i]] = arrC[arrA[i]] + 1;
}
for (int i = 1; i <= k; i++) {
arrC[i] += arrC[i - 1];
}
for (int i = count - 1; i >= 0; i--) {
arrB[arrC[arrA[i]] - 1] = arrA[i];
arrC[arrA[i]] -= 1;
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int a[10] = {10, 8, 21, 33, 35, 45, 12, 4, 5, 9};
int b[10];
countSort(a, b, 45, 10);
for (int i = 0; i < 10; i++) {
cout << b[i]<< " ";
}
cout << endl;
return 0;
}
输出结构: