基数排序是一种非比较排序,它的时间复杂度为O(K*N),其中k是最大那个数的长度,
基数排序其实是一种桶式排序的优化,它适用于N中数据比较大情况,一位一位的去排序最后得到我们要得到的序列
解题代码:
1 //基数排序 2 #include3 #define MAX 1000000 4 void print(int *a, int n) 5 { 6 int i; 7 for (i = 0; i < n; i++) 8 printf("%d\t", 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("\n");50 51 return 0;52 }