//鸽巢排序
//适用条件:所有取值的范围确定,并且在这个范围内个元素的出现频率较高。
//算法描述:为取值范围内的各个可能取到的元素建巢用一维数组表示,巢中
// 巢中存放该元素出现的个数(通过遍历待排序数统计存入)。按照巢的
// 顺序和巢中元素个数列出该有序序列。
//算法空间复杂度为:S(1)时间复杂度为:O(n)。
//例:20个非负数,其中每个数的取值范围为1~9。
#include<iostream>
#include<time.h>
using namespace std;
int myrand(int* src, int n) //随机函数,随机生成n个 0~9的数存入src数组中
{
if(NULL == src||n < 0)
{
cout << "err in args or 'n'" << endl;
return 0;
}
else
{
srand(time(NULL));
for(int i=0; i<n; i++)
{
src[i] = rand()%10;
}
return 1;
}
}
void prin(const int* src, int n) //输出数组中的前n个元素
{
for(int i=0; i<n; i++)
cout << src[i] << " ";
cout << endl;
}
void home_sort(int arg[], int ar, int ser[], int se) //排序函数
{
int i,j,t =0;
for(i=0; i<ar; i++)
++ser[arg[i]];
for(i=0; i<se; i++)
{
for(j=0; j<ser[i]; j++)
{
arg[t] = i;
++t;
}
}
}
int main()
{
int arg[20],se[10] = {0};
if(myrand(arg,20))
prin(arg,20);
home_sort(arg, 20, se, 10);
prin(arg, 20);
return 0;
}
鸽巢排序算法描述和代码举例
原创
©著作权归作者所有:来自51CTO博客作者Creatjearm的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【C】排序算法
文章介绍了几种常用的排序,包括其实现思路与具体代码实现。
排序 算法 代码分析 -
排序算法之计数排序的优化
排序算法之计数排序的优化
数组 计数排序 最小值 -
鸽巢排序Pigeonhole Sort----(排序算法八)
1.算法原理鸽巢排序是对桶排序算法的改进,只是桶中装对应下标放元素出现的次数待排序数组:a[14] ={ 6, 6, 2, 2, 2, 4, 1, 1, 1, 5, 5, 5, 5, 9 };桶中
鸽巢排序 Pigeonhole Sort 数组 i++ 排序算法 -
算法是个什么玩意儿-桶排序和鸽巢排序
桶排序和鸽巢排序 都是对内存空间要去比较大的排序,但是速度是最快的
算法 JAVA算法 桶排序 鸽巢排序 -
hdu 1205 鸽巢原理
clude #include #include using namespace
C++ 鸽巢定理 数论 #include ios -
鸽巢问题java代码 鸽巢问题三个公式
如果要把n+1物体放进n个盒子里,那么至少会有一个盒子包含2个或2个以上的物体。
鸽巢问题java代码 i++ #include 鸽巢原理 -
数学--数论--鸽巢原理
鸽巢原理:所谓鸽巢原理即n+1只鸽子,只有n...
#include 抽屉原理 鸽巢原理 i++ ios