diff --git a/基数排序.cpp b/基数排序.cpp new file mode 100644 index 0000000..b1eba0e --- /dev/null +++ b/基数排序.cpp @@ -0,0 +1,62 @@ +#include +#include +#define N 14 //���鳤�� +#define D 14 //���λ�� + +int GetDigit(int M, int i) //ȡ����M�ĵ�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][N]; //���������顷 + + 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] > 0) + { + num[l++] = allot[j][k]; + k++; + } + } + //ÿ�η��䣬�ռ����ʼ�����������顷��������һλ���ķ�����ռ� + memset(allot, 0, sizeof(allot)); + } +} + +int main() +{ + int num[N] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70}; + + RadixSort(num, N); + + for(int i = 0; i < N; i++) + printf("%d ", num[i]); + printf("\n"); + return 0; +} + +