基数排序

基数排序是一种非比较排序,它的时间复杂度为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	", 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 }
View Code
没有梦想,何谈远方
原文地址:https://www.cnblogs.com/zyue/p/3305683.html