基数高位优先排序算法

morgebe 2011-06-21 11:14:58
找了很多资料,都找不到关于高位排序的。下面是数据结构书上的低位优先算法。
#include <iostream>
using namespace std;

#define MAX_NUM_OF_KEY 8 //关键字项数的最大值
#define RADIX 10 //关键字基数,此时是十进制整数的基数
#define MAX_SPACE 10000
typedef int DataType ;
typedef struct
{
int data; //数据,如571
DataType keys[MAX_NUM_OF_KEY]; //每个数据的所有关键字,571的5,7,1
int next;
}SLCell; //静态链表的节点类型

typedef struct Sllist
{
SLCell *R; //静态链表的可利用空间,r[0]为头结点
int recnum; //静态链表的当前长度
int keynum;
}Sllist, * SLList;

typedef int ArrType[RADIX];

void creatList(SLList &SLL)
{

int key, i=1,j;
cout<<"输入要进行排序的数据:"<<endl;
cin>>key;
while(key!=0)
{
SLL->R[i].data=key;
for(j=1;j<=SLL->keynum;j++)
{
SLL->R[i].keys[j]=key%10;
key/=10;
}
SLL->R[i-1].next=i++;
cin>>key;
}
SLL->recnum=i-1;
SLL->R[SLL->recnum].next=0;
}

void print(SLList &SLL)
{
for(int p=SLL->R[0].next;p;p=SLL->R[p].next)
{
cout<<SLL->R[p].data<<" ";
}
cout<<endl;
}


void distribute(SLCell *R,int i,ArrType front,ArrType end)
{
for(int j=0;j<RADIX;++j)
front[j]=0; //各子表初始化为空表
for(int p=R[0].next;p;p=R[p].next)
{
j=R[p].keys[i]; //映射第i个关键字
if(!front[j])
front[j]=p; //若front[j]为空,则把记录连接到front[j]的头指针上
else
R[end[j]].next=p; //把上一个以j为关键字的数据指向当前的这个数,即下标为p的数据
end[j]=p; //尾指针重新指到每次更新的数据上
}
}


void MSD(SLCell *R,int i,ArrType front,ArrType end)
{
for(int j=0;j<RADIX;++j)
front[j]=0; //各子表初始化为空表
for(int p=R[0].next;p;p=R[p].next)
{
j=R[p].keys[i]; //映射第i个关键字
if(!front[j])
front[j]=p; //若front[j]为空,则把记录连接到front[j]的头指针上
else
R[end[j]].next=p; //把上一个以j为关键字的数据指向当前的这个数,即下标为p的数据
end[j]=p; //尾指针重新指到每次更新的数据上
}
for(j=0;!front[j];j++) //找到第一个不为空的子表
{
R[0].next=front[j];
int k=end[j];
R[k].next=0;
i--;
MSD(R,i,front,end);
}


}

void collect(SLCell *R,int i,ArrType front,ArrType end)
{
for(int j=0;!front[j];j++); //找到第一个不为空的子表
R[0].next=front[j]; //重整静态链表
int k=end[j]; //k为当前子表的尾指针
while(j<RADIX)
{
for(++j;j<RADIX;j++)
if(front[j]) //找下一个非空子表
{
R[k].next=front[j]; //连接
k=end[j];
}
}
R[k].next=0; //k指向最后一个非空子表的尾指针
}

请帮忙给出算法。
...全文
427 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
就想叫yoko 2011-06-21
  • 打赏
  • 举报
回复
你应该搜 基数排序
ryfdizuo 2011-06-21
  • 打赏
  • 举报
回复
这个代码有何问题?
具体算法思路 数据结构书上有讲。
morgebe 2011-06-21
  • 打赏
  • 举报
回复
这代码没问题,只是这仅仅是基数排序的低位优先。我还想知道高位优先的算法。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧