排序5-计数排序
Posted 无聊的马岭头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序5-计数排序相关的知识,希望对你有一定的参考价值。
前言
一、计数排序
思想:计数排序又称鸽巢原理,是对哈希表直接定址法变形的应用。操作步骤:
- 统计相同元素出现的个数
- 根据统计的结果将序列回收到原来的序列中
绝对映射:
细节:
(1):当数组中的最大值较大,且数组中的最小值也较大,那么我们开辟B空间,就会有很大的浪费。
所以相对映射来了:
代码:(几处细节的处理要看仔细)
void CountSort(int* a,int n)
{
// 选择出最大值,最小值
int i = 0,min = a[0],max = a[0];
for(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* count = (int*)malloc(sizeof(int) * range);
memset(count,0,sizeof(int) * range);
//计数
for(i = 0;i < n;i++)
{
count[a[i] -min]++;
}
int j = 0;
//排序
for(i = 0;i < range;i++)
{
while(count[i]--)
{
a[j++] = i + min;
}
}
}
总结:
- 计数排序只能用于整数排序
- 计数排序在数据范围集中时的效率高,应用场景有限
- 时间复杂度:O(N~range)
- 空间复杂度:O(range)
- 稳定性:稳定
我们下期见。
以上是关于排序5-计数排序的主要内容,如果未能解决你的问题,请参考以下文章
程序员笔试面试必会——排序②Python实现 计数排序基数排序