核心思想为分区间排序后合并。适用于数据均匀分布在一个范围内,或浮点数排序或范围明确的数据。如果需要处理整数或其他数据范围,可以通过调整BUCKET_RANGE
的计算方式实现,例如对[0,100)的整数排序:
int index = arr[i] / 10; // 每10个单位一个桶
#include <stdlib.h>
#include <assert.h>
// 桶结构体(动态数组实现)
typedef struct {
float* data; // 桶内数据
int count; // 当前元素数量
int capacity; // 桶容量
} Bucket;
// 创建桶并初始化
Bucket create_bucket(int init_capacity) {
Bucket b;
b.data = (float*)malloc(init_capacity * sizeof(float));
assert(b.data != NULL);
b.count = 0;
b.capacity = init_capacity;
return b;
}
// 向桶中插入元素(自动扩容)
void bucket_insert(Bucket* b, float value) {
if (b->count >=