桶排序就是依据某种方法,或者某种规则先划分出若干个桶,然后根据一定的规则把数据放到相应的桶内,再让桶内的元素排序(一般每个桶内的元素数量有限,因此可以选取各种排序方法),最后再把所有桶的元素合并

现在对每个桶内的元素单独进行排序,完成后并合并这些排序后的元素

C++实现如下
#include<iostream>
#include<vector>
#include<algorithm> //sort
#include<ctime>
using namespace std;
const int N = 10; //桶的个数 数据范围设为0 - 100(左闭右开)
//桶排序 设置几个桶,放入元素并对桶内排序(采用sort)
void BucketSort(vector<int>& a) {
int n = a.size();
vector<vector<int>> bucket(N);
for (int i = 0; i < n; i++)
bucket[a[i] / 10].push_back(a[i]);
//将每个元素放入对应桶中
int k = 0;
for (int i = 0; i < N; i++) {
//对每个桶进行排序
sort(bucket[i].begin(), bucket[i].end());
int size = bucket[i].size();
for (int j = 0; j < size; j++)
a[k++] = bucket[i].at(j); //放入原数组
}
vector<vector<int>>().swap(bucket); //释放空间
}
void show(vector<int>& v) {
for (auto x : v)
cout << x << " ";
cout << endl;
}
int main() {
vector<int> a;
srand((int)time(0));
int n = 50;
while (n--)
a.push_back(rand() % 100); //数据范围[0, 99]
show(a);
BucketSort(a);
cout << endl << endl;
show(a);
}
运行结果如下:
桶排序的适用场景就是当数据分布比较均匀或者数据跨度范围不大的时候。
2717

被折叠的 条评论
为什么被折叠?



