基数排序的C语言描述:

#include<stdio.h>

typedef struct

{

  int num;

  int next;

}slcell;         //静态链表的结点类型

#define M 10

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++;

 }

  }