计数排序法代码实现
来源:互联网 发布:小仙女的网络意思 编辑:程序博客网 时间:2024/05/01 12:14
计数排序是一种高效的线性排序,也是一种稳定的排序算法。它不是基于比较排序,
事实上没有进行一次数据间的比较,因此它的运行效率也比较高。
分为四个步骤:
1、先遍历一遍数组,找出其中最大元素;
2、统计数组中每个值为i的元素出现次数(允许数据重复),存入count_arry的第i项;
3、对所有的计数累加(从count_arry的第二个元素起,也就是count_arry[1])每一项和前一项相加;
4、反向遍历原数组,将每个元素i放在新数组的第count_arry[i]项,每放一个元素就将count_arry[i]减1。
以下是c++代码实现:
int maxData =
pData
[0];
for ( i = 1; i < nLen; i++)
{
if (pData[i] > maxData)
{
maxData = pData[i];
}
}
//pData:待排序数组
//nLen: 数组长度
//maxData:数组中最大值
int CountSort(int* pData, int nLen, int maxData)
{
int i = 0;//用于循环
int* pCout = NULL; //保存记数数据的指针
pCout = (int*)malloc(sizeof(int) * (maxData+1)); //申请空间,注意要+1
//初始化记数为0
memset(pCout, 0, (maxData+1)*sizeof(int) );
//记录排序记数
for (i = nLen - 1; i >=0; i--)
{
pCout[pData[i]]++;
}
//累计求和,确定不比该位置大的数据个数。它保持相等的元素输入时的顺序排序后不变
for (i = 1; i <= maxData; i++)
{
pCout[i] += pCout[i - 1];
}
int* pSort = NULL; //保存排序结果的指针
pSort = (int*)malloc(sizeof(int) * (nLen+1)); //申请空间
for (i = nLen - 1; i >= 0; i--)
{
pSort[pCout[pData[i]] - 1] = pData[i];
pCout[pData[i]]--; //因为有相同数据的可能,所以要把该位置数据个数减一。
}
//排序结束,复制到原数组中。
for (i = nLen; i > 0; i--)
{
pData[i] = pSort[i];
}
//最后要注意释放申请的空间。
free(pCout);
free(pSort);
return 1;
}
计数排序是典型的以空间换时间的算法,对数组中存在很大元素的数组,比较费空间,同时时间复杂度也呈线性增长。
- 计数排序法代码实现
- 排序--计数排序思想及其代码实现
- 计数排序的理解和代码实现
- 计数排序(代码片段)
- 计数排序的实现
- 计数排序简单实现
- 计数排序Java实现
- 计数排序-java实现
- 计数排序C实现
- C++实现计数排序
- Python实现计数排序
- 计数排序 实现
- Java实现计数排序
- Java实现计数排序
- python实现计数排序
- php实现计数排序
- 计数排序c++实现
- 计数排序实现基数排序
- HDU-1026Ignatius and the Princess I
- ASP.NET框架页中的网页重定向
- C语言--根据年月计算该月天数
- telnet完成对imap的验证
- 第13堂课后作业
- 计数排序法代码实现
- Apache PDFbox快速开发指南
- OSX: 实用脚本程序(bash scripts)系列-21
- senddr partner api -- Invoice
- gvim 配置 @windows
- AndroidManifest.xml解析(一)
- baostar_user_authentication
- Markdown 语法
- Spring对象的作用域