#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n;
struct bucket
{
int b[11];
int count;//每桶元素的个数
}*pbucket;
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
void bucketsort(int a[])
{
int i, p, numofbucket, //p表示元素位于第p桶,numofbucket表示所有元素总共分成了numofbucket桶
j = 0, min = a[1], max = a[1];
for(i = 1; i <= n; i++)
{
max = a[i] > max ? a[i] : max;
min = a[i] < min ? a[i] : min;
}
numofbucket = (max - min) / 10 + 1;
pbucket = (bucket *)malloc(numofbucket * sizeof(bucket));
memset(pbucket, 0, numofbucket * sizeof(bucket));
for(i = 1; i <= n; i++)
{
p = (a[i] - min) / 10;
(pbucket + p)->b[(pbucket + p)->count++] = a[i];
}
for(p = 0; p < numofbucket; p++)
{
qsort((pbucket + p)->b, (pbucket + p)->count, sizeof((pbucket + p)->b[0]), cmp);//对每桶元素进行快排
for(i = 0; i < (pbucket + p)->count; i++)
a[j++] = (pbucket + p)->b[i];//把所有桶合在一起
}
for(j = 0; j < n; j++)
{
printf("%d ", a[j]);
if(j == n - 1)
printf("\n");
}
free(pbucket);
}
int main(void)
{
int a[111];
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
bucketsort(a);
}
桶排序
最新推荐文章于 2022-08-25 03:47:47 发布