算法导论:c++桶排序
代码实现
桶排序是按照桶的概念把元素往里面放,然后桶内还有一个排序,桶内排序可以用比较排序也可以用计数排序递归使用桶排序也可以。我这里比较懒,直接用了sort函数。直接就三步,仍然用vector实现。
- 建桶
- 放桶
- 连接桶
vector<double> bucket_sort(vector<double> array) {
vector<vector<double>> output(10);//建立十个桶
for (int i = 0; i < array.size(); i++)
{
int temp = array[i] * 10; //根据小数点第一位放入不同的桶中
output[temp].push_back(array[i]);
}
array.clear(); //清除原无序数组
for (auto vec:output)
{
if (!vec.empty()) {
sort(vec.begin(),vec.end()); //对非空桶进行排序
array.insert(array.end(),vec.begin(), vec.end()); //按桶的顺序放入原数组
}
}
return array;
}
int main()
{
vector<double> array = {
0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68 };
array=bucket_sort(array);
for (double f:array)
{
cout << f << " ";
}
}
测试的例子与书本相同,输出:
还没有评论,来说两句吧...