#include <stdio.h>
#define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) )
void bucket_sort(int a[], int n, int max)
{
int i, j;
int *buckets;
if (a==NULL || n<1 || max<1){
return ;
}
if ((buckets=(int *)malloc(max*sizeof(int)))==NULL){
return ;
}
memset(buckets, 0, max*sizeof(int));
for(i = 0; i < n; i++){
buckets[a[i]]++;
}
for (i = 0, j = 0; i < max; i++){
while( (buckets[i]--) >0 ){
a[j++] = i;
}
}
free(buckets);
}
void main()
{
int i;
int a[] = {78,17,39,26,72,94,21,12,23,68};
int ilen = LENGTH(a);
printf("before sort:");
for (i=0; i<ilen; i++){
printf("%d ", a[i]);
}
printf("\n");
bucket_sort(a, ilen, 10);
printf("after sort:");
for (i=0; i<ilen; i++){
printf("%d ", a[i]);
}
printf("\n");
}