桶排序常用于统计出现次数。以下是排序算法,桶中值b[i]即为i出现的次数。
#include<iostream>
#include<vector>
using namespace std;
void bucketsort(vector<int> &a) {
int b[500]{ 0 };//b为空桶
for (int i = 0; i < a.size(); i++) {
b[a[i]]++; //直接把值放到对应序号的桶里面,自然就完成了排序。
}
a.clear();
for (int i = 0, j = 0; i < 500; i++) {//从b桶复制回a数组
if (b[i] != 0) {
int n = b[i];
while (n--)a.push_back(i);
}
}
}
int main() { //测试
vector<int> a{100,100,20, 33, 25, 32, 99, 32, 86, 99, 25, 10, 20, 99, 10, 33, 86, 19, 33, 74, 99, 32};
bucketsort(a);
for (auto&e:a)cout << e << ' ';
cout << endl;
}