| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1470 人关注过本帖
标题:[求助]基数排序算法
只看楼主 加入收藏
yqfang310
Rank: 2
等 级:新手上路
威 望:4
帖 子:458
专家分:0
注 册:2006-10-10
收藏
 问题点数:0 回复次数:4 
[求助]基数排序算法
有没有人能给我个基数排序算法啊
搜索更多相关主题的帖子: 基数排序 算法 
2006-12-08 04:46
昭歌
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-5-12
收藏
得分:0 

写一组英文单词按字典序排列的基数排序算法。设单词均由大写字母构成,最长的单词有d个字母。提示:所有长度不足d个字母的单词都在尾处补足空格,排序时设置27个箱子,分别与空格,A,B...Z对应。
答:
#define KeySize 10 //设关键字位数d=10
#define Radix 27 //基数rd为27
typedef RecType DataType;//将队列中结点数据类型改为RecType类型
typedef struct node{
char key[KeySize]; //关键字域
OtherInfoType info; //其它信息域,
}RecType; //记录结点类型
typedef RecType seqlist[n+1];

void RadixSort(seqlist R)
{
LinkQueue B[Radix];
int i;
for(i=0;i<Radix;i++)//箱子置空
InitQueue(&B[i]);
for(i=KeySize-1;i>=0;i--){//从低位到高位做d趟箱排序
Distribute(R,B,i);//第KeySize-i趟分配
Collect(R,B);//第KeySize-i趟收集
}
}

void Distribute(seqlist R,LinkQueue B[], int j)
{//按关键字的第j个分量进行分配,初始时箱子为空
int i;
j=KeySize-j; // 确定关键字从低位起的位置
for(i=0;i<n;i++) //依次扫描R[i],将其装箱
if (R[i].key[j]-'A'>26)
EnQueue(&B[0],R[i]);//将第j位关键字位空格的记录入第0个队列
else EnQueue(&B[0],R[R[i].key[j]-'A'+1]);
}

void Collect(seqlist R,LinkQueue B[])
{
//依次将各非空箱子中的记录收集起来,本过程结束,各箱子都变空
int i,j;
for (j=0;j<Radix;j++)
while(!QueueEmpty(&B[j]))
R[i++]=DeQueue(&B[j]);//将出队记录依次输出到R[i]中
}

2007-06-04 22:52
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
baidu 一搜就来了

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-06-05 13:12
滨海
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-6-3
收藏
得分:0 
有点难懂埃

让暴风雨来的更猛烈些吧!!
2007-06-09 23:28
曾小
Rank: 1
等 级:新手上路
威 望:1
帖 子:239
专家分:0
注 册:2006-9-27
收藏
得分:0 

2007-06-10 12:21
快速回复:[求助]基数排序算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075271 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved