声明
typedef struct node
{
char data[MAXD]; //MAXD为最大的关键字位数
struct node *next; //指向下一个结点
}NodeType; //基数排序数据结点类型
基数排序算法
void RadixSort(NodeType *&p,int r,int d) //LSD奇数排序算法
{
NodeType *head[MAXR],*tail[MAXR],*t; //定义各链队的首尾指针
int i,j,k;
for(i=0;i<=d-1;i++) //从低位到高位循环
{
for(j=0;j<r;j++) //初始化各指针
head[j]=tail[j]=NULL;
while(p!=NULL)
{
k=p->data[i]-'0'; //找到第k个链队
if(head[k]==NULL) //第k队空时,首尾指针都指向p
{head[k]=p;tail[k]=p;}
else //非空p进队
{
tail[k]->next=p;tail[k]=p;
}
p=p->next; //取下一个待排序元素
}
p=NULL; //重新用p来收集所有结点
for(j=0;j<r;j++) //收集,对于每一个链队循环
if(head[j]!=NULL) //若第j链队为空
{
if(p==NULL)
{
p=head[j];t=tail[j];
}
else
{
t->next=head[j];t=tail[j];
}
}
t->next=NULL; //最后一个几点next为空
}
}