基数排序

基数排序

#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define KEYN 3

struct ele{
int key;
struct ele *link;
};

void bases(ele **h)
{
   ele *head[10],*tail[10],*p,*u;
   int factor=1,i,j;
   p=*h;
   for(i=0;i<KEYN;i++)
   {
   for(j=0;j<10;j++)
   {head[j]=NULL;
    tail[j]=NULL;
   }
   while(p)
   {
      u=p->link;
         j=(p->key/factor)%10;
   if(head[j]==NULL)
    head[j]=p;
   else
    tail[j]->link=p;
   tail[j]=p;
   tail[j]->link=NULL;
   p=u;
   }
   p=NULL;
   for(j=0;j<10;j++)
   {
      if(head[j]==NULL)
    continue;
   if(p==NULL)
    p=head[j];
   else
    u->link=head[j];
   u=tail[j];
   }
  factor*=10;

   }
    *h=p;
}


void main()
{
ele *h,*u;
int a[10];
cout<<"输入10个数:"<<endl;
for(int i=0;i<10;i++)
  cin>>a[i];

h=NULL; /*先形成一个空链表*/
for(i=0;i<10;i++)
{ /*任意形成一个链表*/
u=new(ele);
u->key=a[i];
u->link=h;
h=u;
}
bases(&h); /*排序*/
for(u=h;u;u=u->link) /*顺序输出链表各表元的链值*/
cout<<u->key<<' ';
cout<<endl;

}

你可能感兴趣的:(基数排序)