基数排序原理也很简单,一般分为最低位优先和最高位先,这里采用最低位先
从个位开始按序分配,再收集,十位、百位往复、、、
附上演示代码如下:
#include<iostream>
using namespace std;
#include<cmath>
typedef struct Node{
int data;
Node *p;
}NODE;
NODE *h[10];
int a[10]={75,233,98,44,537,132,29,64,38,82};
void init()
{
for(int i=0;i<10;i++)
{
h[i]=(NODE *)malloc(sizeof(NODE));
h[i]->data=-1;
h[i]->p=NULL;
}
}
void display()
{
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void addnode(NODE *point,int x)
{
while(point->p!=NULL)
point=point->p;
NODE *nod=(NODE*)malloc(sizeof(NODE));
nod->p=NULL;
nod->data=x;
point->p=nod;
}
void sort(int d)//d是数字最高位数
{
// int b[10];
int i,j;
NODE *pl;
int x=1;
while(x<=d)
{
for(i=0;i<10;i++)
{
j=(a[i]%(int)pow(10,x))/(int)pow(10,x-1);//这一句是经典
addnode(h[j],a[i]);
}
for(i=0,j=0;i<10;i++)
{
pl=h[i]->p;
while(pl!=NULL)
{
a[j++]=pl->data;
pl=pl->p;
}
}
for(i=0;i<10;i++)
{
h[i]->data=-1;
h[i]->p=NULL;
}
x++;
}
}
int main()
{
init();
sort(3);
display();
return 0;
}