计数排序假设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;
}
本文介绍了一种简单且高效的排序算法——计数排序,并通过一个具体的C++实现示例进行了详细说明。该算法适用于输入元素为有限整数范围的情况,特别当最大值与元素数量相近时效果更佳。

1926

被折叠的 条评论
为什么被折叠?



