基数排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 const int N = 10000;
 4 const int RADIX = 10;
 5 int a[N];
 6 int count[RADIX];
 7 void radixSort(int n)
 8 {
 9     int *bucket = new int[RADIX];
10     int d = 1;
11     int i;
12     for(int k=1; k<=10; k++)//最大数为1<<32 - 1,为10位数
13     {
14         for(i=0; i<RADIX; ++i)
15             count[i] = 0;
16         for(i=0; i<n; ++i)
17             count[a[i]/d%10] ++;
18         for(i=1; i<RADIX; ++i)
19             count[i] += count[i-1];
20         for(i=RADIX-1; i>=0; --i)
21         {
22             int j = a[i]/d%10;
23             bucket[count[j]-1] = a[i];
24             count[j]--;
25         }
26         for(i=0; i<n; ++i)
27             a[i] = bucket[i];
28         d *= 10;
29     }
30 }
31 int main()
32 {
33     int n,i;
34     scanf("%d",&n);
35     for(i=0; i<n; ++i)
36         scanf("%d",&a[i]);
37     radixSort(n);
38     for(i=0; i<n; ++i)
39         printf("%d ",a[i]);
40     return 0;
41 }
原文地址:https://www.cnblogs.com/justPassBy/p/4079690.html