#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define RADIX_10 10 //0~9空间
#define KEY_10 10 //关键字位数(数据最大位数)
int GetPos (int num, int pos) //获取关键字
{
int temp;
temp = pow(10, pos-1);
return num/temp%10;
}
void RadixSort (int *pArrynum, int iDatanum)
{
int *raidxArry[RADIX_10], i, j, k, pos;
for(i = 0; i < RADIX_10; i++)
{
raidxArry[i] = (int *)malloc(sizeof(int) *(iDatanum+1));//为每个0~9申请连续存储空间
raidxArry[i][0] = 0;
}
for(pos = 1; pos <= KEY_10; pos++)
{
for(j = 0; j < iDatanum; j++) //关键字排序
{
int num = GetPos(pArrynum[j], pos);
int index = ++raidxArry[num][0];
raidxArry[num][index] = pArrynum[j];
}
for(j = 0, i = 0; j < KEY_10; j++) //合并
{
for(k = 1; k <= raidxArry[j][0]; k++)
{
pArrynum[i++] = raidxArry[j][k];
}
raidxArry[j][0] = 0;
}
}
}
int main ()
{
int table[10], i;
for(i = 0; i < 5; i++)
{
scanf("%d", &table[i]);
}
RadixSort(table, 5);
for(i = 0; i < 5; i++)
{
printf("%d\n", table[i]);
}
return 0;
}
参考博文:
http://blog.csdn.net/hitwhylz/article/details/9970451