Bucket or radix sort in C.

01  #include <stdio.h> 
02  #define MAX 100 
03  #define SHOWPASS 
04  
05  void print(int *a, int n) 
06   { 
07    int i; 
08    for (i = 0; i < n; i++) 
09    printf("%d\t;", a[i]); 
10   } 
11  void radix_sort(int *a, int n) 
12   { 
13    int i, b[MAX], m = 0, exp = 1; 
14    for (i = 0; i < n; i++) 
15     { 
16      if (a[i] > m) 
17      m = a[i]; 
18     } 
19    while (m / exp > 0) 
20     { 
21      int box[10] = { 0 }; 
22      for (i = 0; i < n; i++) 
23      box[a[i] / exp % 10]++; 
24      for (i = 1; i < 10; i++) 
25      box[i] += box[i - 1]; 
26      for (i = n - 1; i >= 0; i--) 
27      b[--box[a[i] / exp % 10]] = a[i]; 
28      for (i = 0; i < n; i++) 
29      a[i] = b[i]; 
30      exp *= 10; 
31     #ifdef SHOWPASS 
32     printf("\n\nPASS : "); 
33     print(a, n); 
34     #endif 
35     } 
36   } 
37  int main() 
38  { 
39   int arr[MAX]; 
40   int i, num; 
41   printf("\nEnter total elements (num < %d) : ", MAX); 
42   scanf("%d", &num); 
43   printf("\n Enter %d Elements : ", num); 
44   
45   for (i = 0; i < num; i++) 
46   scanf("%d", &arr[i]); 
47   printf("\n ARRAY : "); 
48   print(&arr[0], num); 
49   radix_sort(&arr[0], num); 
50   printf("\n \nSORTED : "); 
51   print(&arr[0], num); 
52   
53   return 0; 
54   } 

 OUTPUT :
 
 Enter total elements (num < 100) : 5
 
 Enter 5 Elements : 
 111
 32
 15463
 2355
 6
 
 ARRAY : 111  ;32  ;15463  ;2355   ;6 ;
 
 PASS : 111   ;32  ;15463  ;2355   ;6 ;
 
 PASS : 6   ;111    ;32     ;2355   ;15463  ;
 
 PASS : 6   ;32     ;111    ;2355   ;15463  ;
 
 PASS : 6   ;32     ;111    ;2355   ;15463  ;
 
 PASS : 6   ;32     ;111    ;2355   ;15463  ;
 
 SORTED : 6     ;32     ;111    ;2355   ;15463  ;