CH8_10.C
上传用户:lgb298
上传日期:2013-03-22
资源大小:1025k
文件大小:1k
源码类别:

软件工程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #define D 3
  3. typedef struct node
  4. {  int key;
  5. /*   float info;*/
  6.    int link;
  7. }JD;
  8. int radixsort(JD r[],int n)
  9. {  int i,j,k,t,p,rd,rg,f[10],e[10];
  10.    for(i=1;i<n;i++)  r[i].link=i+1;
  11.    r[n].link=0;
  12.    p=1; rd=1; rg=10;
  13.    for(i=1;i<=D;i++)
  14.   {  for(j=0;j<10;j++)
  15.      {  f[j]=0;
  16.         e[j]=0;
  17.      }
  18.      do{
  19.           k=(r[p].key%rg)/rd;
  20.           if(f[k]==0)
  21.               f[k]=p;
  22.           else 
  23.               r[e[k]].link=p;
  24.           e[k]=p;
  25.           p=r[p].link;
  26.        }while(p>0);
  27.      j=0;
  28.      while(f[j]==0) j++;
  29.      p=f[j];  t=e[j];
  30.      for(k=j+1;k<10;k++)
  31.         if(f[k]>0)
  32.         {  r[t].link=f[k];
  33.            t=e[k];
  34.         }
  35.      r[t].link=0;
  36.      rg*=10;
  37.      rd*=10;
  38.   }
  39.    return(p);
  40. }
  41. void main()
  42. {
  43.     static JD r[]={{0,0},{278,0},{109,0},{63,0},{930,0},{589,0},
  44.  {184,0},{505,0},{269,0},{8,0},{83,0}};
  45.     int i,n=10;
  46.     i=radixsort(r,n);
  47.     while(i!=0)
  48.     {  printf("%d  ",r[i].key);
  49.        i=r[i].link;
  50.     }
  51.     printf("n");
  52. }