帮我写一个桶排序的cpp程序
时间: 2023-08-19 12:10:12 浏览: 35
当然可以!
桶排序是一种排序算法,它的核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序,最终将所有桶中的数据一次性拼接起来,就是排好序的结果。
下面是一个简单的桶排序的 CPP 代码示例:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void bucketSort(vector<float>& arr) {
// 找到最大值和最小值
float maxVal = arr[0];
float minVal = arr[0];
for (int i = 1; i < arr.size(); i++) {
maxVal = max(maxVal, arr[i]);
minVal = min(minVal, arr[i]);
}
// 计算桶的数量,并初始化桶
int bucketCount = (int)(maxVal - minVal) / arr.size() + 1;
vector<vector<float>> buckets(bucketCount);
// 将数据分配到各个桶中
for (int i = 0; i < arr.size(); i++) {
int bucketIndex = (int)(arr[i] - minVal) / arr.size();
buckets[bucketIndex].push_back(arr[i]);
}
// 对每个桶里的数据进行排序
for (int i = 0; i < bucketCount; i++) {
sort(buckets[i].begin(), buckets[i].end());
}
// 将所有桶中的数据一次性拼接起来,即为排好序的结果
int index = 0;
for (int i = 0; i < bucketCount; i++) {
for (int j = 0; j < buckets[i].size(); j++) {
arr[index++] = buckets[i][j];
}
}
}
int main() {
vector<float> arr = {0.42, 0.32, 0.33, 0.52, 0.37, 0.47, 0.51};
bucketSort(arr);
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
这段代码首先找到了要排序的数据中的最大值和最小值,然后计算出需要多少个桶,并初始化这些桶。接着将数据分配到对应的桶中,再对每个桶中的数据进行排序。最后,将所有桶中的数据依次拼接起来,即可得到排好序的结果。
希望对你有所帮助!