基数排序是一种非比较排序,它的时间复杂度为O(K*N),其中k是最大那个数的长度,

基数排序其实是一种桶式排序的优化,它适用于N中数据比较大情况,一位一位的去排序最后得到我们要得到的序列

解题代码:

 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\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 }
View Code

 

posted on 2013-09-06 16:17  dark_dream  阅读(203)  评论(0编辑  收藏  举报