基数排序是一种非比较排序,它的时间复杂度为O(K*N),其中k是最大那个数的长度,
基数排序其实是一种桶式排序的优化,它适用于N中数据比较大情况,一位一位的去排序最后得到我们要得到的序列
解题代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //基数排序 2 #include <stdio.h> 3 #define MAX 1000000 4 void print(int *a, int n) 5 { 6 int i; 7 for (i = 0; i < n; i++) 8 printf("%d ", a[i]); 9 } 10 11 void radixsort(int *a, int n) 12 { 13 int i, b[MAX], m = a[0], exp = 1; 14 for (i = 1; i < n; i++) 15 { 16 if (a[i] > m) 17 m = a[i]; 18 } 19 20 while (m / exp > 0) 21 { 22 int bucket[10] ={ 0 }; 23 for (i = 0; i < n; i++) 24 bucket[(a[i] / exp) % 10]++; 25 for (i = 1; i < 10; i++) 26 bucket[i] += bucket[i - 1]; 27 for (i = n - 1; i >= 0; i--) 28 b[--bucket[(a[i] / exp) % 10]] = a[i]; 29 for (i = 0; i < n; i++) 30 a[i] = b[i]; 31 exp *= 10; 32 } 33 } 34 35 36 int arr[MAX]; 37 int main() 38 { 39 int i, n; 40 41 scanf("%d", &n); 42 43 for (i = 0; i < n; i++) 44 scanf("%d", &arr[i]); 45 46 radixsort(&arr[0], n); 47 48 print(&arr[0], n); 49 printf(" "); 50 51 return 0; 52 }