测试结果:
1. 无重复数据
6 3 4 2 5 1
1 2 3 4 5 6
2. 有重复数据
6 5 2 2 5 1
1 2 2 5 5 6
3. 有负数,直接退出
6 -5 2 2 5 1
critical error
6 -5 2 2 5 1
4. 最大数超过桶大小(100),直接退出
6 100 2 2 5 1
critical error
6 100 2 2 5 1
源码bucket.c:
#include <stdio.h>
#include <string.h>
#define ARRAY_N 6
int array[ARRAY_N]={6, 100 , 2, 2, 5, 1};
int show_list(int array[], int n)
{
int i = 0;
for (i=0; i < ARRAY_N; i++)
{
printf("%5d", array[i]);
}
printf("\n");
return 0;
}
int bucket_sort(int array[], int n, int max)
{
int i = 0;
int j = 0;
int k = 0;
int bucket[max];
memset(bucket, 0, sizeof(bucket));
for (i = 0; i < n; i++)
{
if (array[i] >= max || array[i] < 0)
{
printf("critical error\n");
return -1;
}
bucket[array[i]]++;
}
for (i = 0; i < max; i++)
{
for (k = bucket[i]; k > 0; k--)
{
array[j++] = i;
}
if (j >= n)
{
break;
}
}
printf("\n");
return 0;
}
int main(void)
{
show_list(array, ARRAY_N);
bucket_sort(array, ARRAY_N, 100);
show_list(array, ARRAY_N);
return 0;
}