- 概念:
- 计数排序,又称为鸽巢原理,是对哈希定址法的变形应用。
- 核心思想是:
- 具体代码如下:
void CountSort(int* a, int n)//计数排序
{
int max = a[0];
int min = a[0];
for (int i = 0; i < n; i++)
{
if (a[i]>max)
{
max = a[i];
}
if (a[i] < min)
{
min = a[i];
}
}
int range = max - min + 1;
int* countArray = (int*)malloc(sizeof(int)*range);
memset(countArray, 0, sizeof(int)*range);//把新开辟的数组初始化为0
for (int i = 0; i < n; i++)//遍历原数组统计每个数字出现的次数
{
countArray[a[i] - min]++;
}
int index = 0;
for (int i = 0; i < range; i++)//遍历范围,对原数组进行排序
{
while (countArray[i]--)
{
a[index] = i + min;
index++;
}
}
}
- 计数排序总结:
1.计数排序在数据范围集中时,效率很高,但是适用范围及场景有限
2.时间复杂度: O(MAX(N,范围))
3.空间复杂度: O(范围)~
4.稳定性: 稳定