基数排序
代码实现:
#include <stdio.h>
void radix_sort(int A[],int N,int maxradix)
{
int i,j,k=0,x=1,bnum;//k表示每次排序的趟数,x表示除以数,bnum表示b数组的下标
int count[10][N];
int num[10],b[10];//num数组表示某下标有多少个元素
for(i=0;i<10;i++)
b[i]=A[i];
int temp;
while(k<maxradix) //maxradix表示总共排序趟数
{
for(i=0;i<10;i++)
num[i]=0;
for(i=0;i<10;i++)
for(j=0;j<N;j++)
count[i][j]=-1;
for(i=0;i<N;i++)
{
temp=b[i];
temp=(temp/x)%10;
count[temp][num[temp]]=b[i];
num[temp]++;
}
bnum=0;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(count[i][j]!=-1)
{
b[bnum]=count[i][j]; printf("%d",b[bnum]);printf(" ");
bnum++;
}
}
}
k++;
x=x*10;
printf("\n");
}
}
int main(void) {
int i;
int A[]={64,8,216,512,27,729,0,1,343,125};
printf("before sorted:");
for(i=0;i<10;i++)
{
printf("%d",A[i]);printf(" ");
}
printf("\n");
printf("After sorted:");
printf("\n");
radix_sort(A,10,3);
}
结果: