#include <stdio.h>
int data[10]={4,11,9,8,7,6,5,4,3,2};
typedef struct list
{
int data;
int next;
}List;
List bucket[10];
List d[10];
int maxbit(int data[],int n)
{
int i,c,p;
int d=1;
for(i=0;i<n;i++)
{
c=1;
p=data[i];
while(p/10)
{
p=p/10;
c++;
}
if(c>d)
{
d=c;
}
}
return d;
}
void init(int data[],int n)
{
int j;
for(j=0;j<n;j++)
{
bucket[j].next=-1;
bucket[j].data=j;
}
for(j=0;j<n;j++)
{
d[j].data=data[j];
d[j].next=-1;
}
}
void RadixSort(int data[],int n)
{
int p=maxbit(data,n),i,k,a,b,c;//通过maxbit这个函数确定p的值,是为1还是2或者3及其他呢。n为10,其中包括10个数字
int r=1;
for(i=0;i<p;i++)
{
init(data,n);
if(i !=0)
{
for(k=n-1;k>=0;k--)
{
a=d[k].data/r;
b=a%10;
d[k].next=bucket[b].next;
bucket[b].next=k;
}
}
else
{
for(k=0;k<n;k++)
{
a=d[k].data/r;
b=a%10;
d[k].next=bucket[b].next;
bucket[b].next=k;
}
}
c=0;
for(k=0;k<n;k++)
{
if(bucket[k].next!=-1)
{
p=bucket[k].next;
data[c++]=d[p].data;
while(d[p].next!=-1)
{
data[c++]=d[d[p].next].data;
p=d[p].next;
}
}
}
r=r*10;
}
}
void main()
{
int i;
RadixSort(data,10);
printf("排序之前的数值:\n");
for(i=0;i<10;i++)
{
printf("%d",data[i]);
}
printf("\n");
}
int data[10]={4,11,9,8,7,6,5,4,3,2};
typedef struct list
{
int data;
int next;
}List;
List bucket[10];
List d[10];
int maxbit(int data[],int n)
{
int i,c,p;
int d=1;
for(i=0;i<n;i++)
{
c=1;
p=data[i];
while(p/10)
{
p=p/10;
c++;
}
if(c>d)
{
d=c;
}
}
return d;
}
void init(int data[],int n)
{
int j;
for(j=0;j<n;j++)
{
bucket[j].next=-1;
bucket[j].data=j;
}
for(j=0;j<n;j++)
{
d[j].data=data[j];
d[j].next=-1;
}
}
void RadixSort(int data[],int n)
{
int p=maxbit(data,n),i,k,a,b,c;//通过maxbit这个函数确定p的值,是为1还是2或者3及其他呢。n为10,其中包括10个数字
int r=1;
for(i=0;i<p;i++)
{
init(data,n);
if(i !=0)
{
for(k=n-1;k>=0;k--)
{
a=d[k].data/r;
b=a%10;
d[k].next=bucket[b].next;
bucket[b].next=k;
}
}
else
{
for(k=0;k<n;k++)
{
a=d[k].data/r;
b=a%10;
d[k].next=bucket[b].next;
bucket[b].next=k;
}
}
c=0;
for(k=0;k<n;k++)
{
if(bucket[k].next!=-1)
{
p=bucket[k].next;
data[c++]=d[p].data;
while(d[p].next!=-1)
{
data[c++]=d[d[p].next].data;
p=d[p].next;
}
}
}
r=r*10;
}
}
void main()
{
int i;
RadixSort(data,10);
printf("排序之前的数值:\n");
for(i=0;i<10;i++)
{
printf("%d",data[i]);
}
printf("\n");
}