编辑代码

#include <stdio.h>
#include <string.h>
#define  size 10  
#define  D 5       

//取整数M的第i位数
int GetDigit(int M, int i) 
{
	while(i > 1)
	{
		M /= 10;
		i--;
	}
	return M % 10;
}

// 基数排序
void RadixSort(int *num, int len)
{
    int i, j, k, l, digit;
    int allot[10][size];
    memset(allot, 0, sizeof(allot));
    for (i = 1; i <= D; i++)
    {
        for (j = 0; j < len; j++)
        {
            digit = GetDigit(num[j], i);  
            k = 0;
            while (allot[digit][k])
            {
                k++;
            }
            allot[digit][k] = num[j];
        }
        l = 0;
        for (j = 0; j < 10; j++)
        {
            k = 0;
            while (allot[j][k])
            {
                num[l++] = allot[j][k++];
            }
        }
        memset(allot, 0, sizeof(allot));
    }
}

int main()
{
    int i, num[size] = {55, 20, 94, 14, 17, 19, 84, 32, 63, 87};
    RadixSort(num, size);

    for (i = 0; i < size; i++)
    {
        printf("%d ", num[i]);
    }
    printf("\n");
    return 0;
}