#include<iostream>
#define MAXNUM_KEY 8
#define RADIX 10 //关键字的基数,此时是十进制整数的基数
#define MAX_SPACE 1000
typedef int KeyType;
typedef struct{
KeyType keys[MAXNUM_KEY];
InfoType otheritems;
int next;
}SLCell;//静态链表的结点类型
typedef struct{
SLCell r[MAX_SPACE];//静态链表可用的空间,r[0]为头结点
int keynum;//记录的当前关键字的个数
int recnum;//静态链表的当前长度
}SLList;//静态链表类型
typedef int ArrType[RADIX]//数组类型
void Distribute(SLCell &r,int i,ArrType &f,ArrType &e){
for(j=0;j<RADIX;++j) f[j]=0;
for(p=r[0].next;p;p=r[p].next){
j=ord(r[p].keys[i]);
if(!f[j]) f[j]=p;
else r[e[j]].next=p;
e[j]=p;
}
}
void Collect(SLCell &r,int i,ArrType f,ArrType e){
for(j=0;!f[j];j=succ(j));
r[0].next=f[j]; t=e[j];
while(j<RADIX){
for(j=succ(j);j<RADIX-1&&!f[j];j=succ(j));//找下一个非空子表
if(f[j]) {
r[t].next=f[j];
t=e[j];
}
r[t].next=0;
}
}
void RadixSort(SLList &L){
for(i=0;i<L.recnum++i) L.r[i].next=i+1;
L.r[L.recnum].next=0;
for(i=0;i<L.keynum;++i){
Distribute(L.r,i,f,e);
Collect(L.r,i,f,e);
}
}
基数排序
最新推荐文章于 2024-09-15 11:40:06 发布