基数算法基本思想:将一个数组先按个位排序,整合一下;再按十位排序。。。。(当然也可以从高位到低位)
该算法时间复杂度约为O(n*数的位数)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int data[10]={73,22,93,43,55,14,28,65,39,81};
int temp[10][10]={0}; 基数排序算法
int order[10]={0};
int i,j,k,n,lsd;
k=0;n=1;
printf("\n排序前: ");
for (i=0;i<10;i++)
printf("%d ",data[i]);
putchar('\n');
while(n<=10)
{
for (i=0;i<10;i++)
{
lsd=((data[i]/n)%10);
temp[lsd][order[lsd]]=data[i];
order[lsd]++;
}
printf("\n重新排列: ");
for (i=0;i<10;i++)
{
if(order[i]!=0)
for (j=0;j<order[i];j++)
{
data[k]=temp[i][j];
printf("%d ",data[k]);
k++;
}
order[i]=0;
}
n*=10;
k=0;
}
putchar('\n');
printf("\n排序后: ");
for (i=0;i<10;i++)
printf("%d ",data[i]);
return 0;
}