计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。当k=O(n)时,计数排序的运行时间为k+n。
下面以一个不大于k=5的非负整数数组为例(c++)。
#include<iostream>
using namespace std;
void CountingSort(int *arrayOrign,int *arraySort,int length,int k)
{
int *array = new int[k + 1];
for (int i=0;i<=k;i++)
{
array[i] = 0;
}
for (int i =0;i<length;i++)
{
array[arrayOrign[i]] = array[arrayOrign[i]] + 1;
}
for (int i =1;i<k+1;i++)
{
array[i] = array[i] + array[i-1];
}
for (int i = length-1;i>=0;i--)
{
arraySort[array[arrayOrign[i]]-1] = arrayOrign[i];
array[arrayOrign[i]] = array[arrayOrign[i]] - 1;
}
delete[] array;
}
int main()
{
int arrayOrign[8] = {2,5,3,0,2,3,0,3};
cout<<"Orign Sort: ";
for (int i = 0;i<8;i++)
{
cout<<arrayOrign[i]<<" ";
}
cout<<endl;
int arraySort[8];
CountingSort(arrayOrign,arraySort,8,5);
cout<<"After Sort: ";
for (int i = 0;i<8;i++)
{
cout<<arraySort[i]<<" ";
}
cout<<endl;
return 0;
}