您的位置:首页 > 编程语言

鸽巢排序算法描述和代码举例

2015-05-31 16:51 197 查看
//鸽巢排序
//适用条件:所有取值的范围确定,并且在这个范围内个元素的出现频率较高。
//算法描述:为取值范围内的各个可能取到的元素建巢用一维数组表示,巢中
// 巢中存放该元素出现的个数(通过遍历待排序数统计存入)。按照巢的
// 顺序和巢中元素个数列出该有序序列。
//算法空间复杂度为: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息