定义
桶排序
桶排序将要排序的元素放到不同的桶中,再对各个桶进行排序,最后从桶中取出元素组成排好的序列。若元素均匀地放到了各个桶中,则桶内排序使用插入排序会更高效。若桶内元素分布不均匀,如全部元素都放到了同一个桶中,则复杂度退化到桶内排序算法的复杂度。
实现
int MAX_N, n, w, a[MAX_N];
vector<int> bucket[N];
void insertion_sort(vector<int> a)
{
for (int i = 1; i < a.size(); i++)
{
int key = a[i];
int j = i - 1;
while (j >= 0 && a[j] > key)
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = key;
}
}
void bucket_sort()
{
int bucket_size = N / n + 1; // 将值域划分为 n 个桶
for (int i = 0; i < n; i++)
bucket[a[i] / bucket_size].emplace_back(a[i]); // 将元素放入对应的桶中
int cnt = 0;
for (int i = 0; i < N; i++)
{
insertion_sort(bucket[i]); // 对每个桶进行插入排序
for (int j = 0; j < bucket[i].size(); j++)
a[cnt++] = bucket[i][j];
}
}