您的位置:首页 > 编程语言 > C语言/C++

基数排序C语言代码实现

2015-06-26 09:11 190 查看
#include<stdio.h>
typedef struct
{
int num;
int next;
}slcell;         //静态链表的结点类型
#define M 11
int f[M];
int e[M];
int head=0;
void distribute(slcell *a,int w)
{
int i;
int last;
for(i=0;i<10;i++)
f[i]=-1;
for(i=head;i!=-1;i=a[i].next)
{
last=(a[i].num/w)%10;
if(f[last]==-1)
f[last]=i;
else
a[e[last]].next=i;

e[last]=i;
}

}              //某一次排序
void collect(slcell *a)
{
int i;
int l = -1;
for (i=0; i<10; i++)
if (f[i] != -1)
{
if (l == -1)
head = f[i];
else
a[l].next = f[i];
l = e[i];
}
a[l].next = -1;
}                   //将排序好的数组恢复成静态链表
void Output(slcell *a, int head)
{
while (head != -1) {
printf("%4d", a[head].num);
head = a[head].next;
}
printf("n");
}                        //输出静态链表中的值
void main()
{
int i,max,k=1;
slcell a[M];
printf("请依次输入%d个整数n",M);
printf("请输入第1个数:");
scanf("%d",&a[0].num);
a[0].next=1;
max=a[0].num;
for(i=1;i<M;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&a[i].num);
a[i].next=i+1;
if(max<a[i].num)
max=a[i].num;
}
a[M-1].next=-1;
for(i=1;i<max;i=i*10)
{
distribute(a,i);
collect(a);
printf("第%d排序的结果是:n",k);
Output(a,head);
k++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: