计数排序(Counting Sort)是一种线性时间复杂度的排序算法,适用于待排序元素的范围比较小的情况。它的基本思想是统计序列中每个元素出现的次数,然后根据统计结果将元素排列起来。
以下是C++中的计数排序的实现代码:
#include <iostream>
using namespace std;
void CountSort(int arr[], int nLen)
{
if (arr == nullptr || nLen < 0)
return;
int max = arr[0];
int min = arr[0];
for (int i = 0; i < nLen; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
if (arr[i] < min)
{
min = arr[i];
}
}
int* pCountArr = new int[max - min + 1];
memset(pCountArr, 0, (max - min + 1) * sizeof(int));
for (int i = 0; i < nLen; i++)
{
pCountArr[arr[i] - min]++;
}
int j = 0;
for (int i = 0; i < max - min + 1; i++)
{
while (pCountArr[i] != 0)
{
arr[j] = i + min;
j++;
pCountArr[i]--;
}
}
delete[]pCountArr;
pCountArr ==NULL;
}
int main()
{
int arr[10]={3,4,7,6,8,9,1,3,5,7};
CountSort(arr,10);
for(int nVal: arr)
{
cout<<nVal<<" ";
}
cout<<endl;
return 0;
}
这段代码实现了计数排序算法。首先找到序列中的最大值,然后创建一个计数数组count,大小为最大值加一,并将数组初始化为0。接下来,统计元素出现的次数,将次数存在计数数组对应的下标位置。最后,根据计数数组重新排列序列中的元素。
计数排序的时间复杂度为O(n+k),其中n表示输入序列的长度,k表示输入序列中的最大值。计数排序的空间复杂度为O(n+k)。计数排序是一种稳定的排序算法,适用于输入序列中元素的范围不大的情况。