天天看點

基數排序

基數排序是一種非比較排序,它的時間複雜度為O(K*N),其中k是最大那個數的長度,

基數排序
基數排序

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

上一篇: 基數排序
下一篇: 基數排序