鸽巢排序算法描述和代码举例
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;
}
//适用条件:所有取值的范围确定,并且在这个范围内个元素的出现频率较高。
//算法描述:为取值范围内的各个可能取到的元素建巢用一维数组表示,巢中
// 巢中存放该元素出现的个数(通过遍历待排序数统计存入)。按照巢的
// 顺序和巢中元素个数列出该有序序列。
//算法空间复杂度为: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;
}
相关文章推荐
- 文件遍历排序函数
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- C#折半插入排序算法实现方法
- SQL进行排序、分组、统计的10个新技巧分享
- C++实现位图排序实例
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)
- PHP下对数组进行排序的函数
- PHP数组排序之sort、asort与ksort用法实例
- php通过asort()给关联数组按照值排序的方法