上一篇
在众多排序算法中,C++桶排序算法是一种基于分治思想的非比较型排序方法,特别适用于数据分布均匀且范围已知的场景。本教程将带你从零开始理解桶排序原理,并通过完整的代码示例掌握其实现方式。
桶排序(Bucket Sort)的基本思想是将待排序数组中的元素分配到若干个“桶”中,每个桶再分别进行排序(可以使用其他排序算法或递归使用桶排序),最后将各个桶中的元素按顺序合并,得到最终的有序序列。
#include <iostream>#include <vector>#include <algorithm>void bucketSort(std::vector<double>& arr) { if (arr.empty()) return; // 1. 找到最大值和最小值 double minVal = *std::min_element(arr.begin(), arr.end()); double maxVal = *std::max_element(arr.begin(), arr.end()); // 2. 创建桶 int bucketCount = arr.size(); std::vector<std::vector<double>> buckets(bucketCount); // 3. 将元素分配到桶中 for (double num : arr) { int index = static_cast<int>((num - minVal) / (maxVal - minVal + 1) * bucketCount); // 防止最大值越界 if (index == bucketCount) index--; buckets[index].push_back(num); } // 4. 对每个桶排序并合并 int k = 0; for (int i = 0; i < bucketCount; ++i) { if (!buckets[i].empty()) { std::sort(buckets[i].begin(), buckets[i].end()); for (double val : buckets[i]) { arr[k++] = val; } } }}// 测试函数int main() { std::vector<double> data = {0.42, 0.32, 0.33, 0.52, 0.37, 0.47, 0.51}; std::cout << "排序前: "; for (double d : data) std::cout << d << " "; std::cout << std::endl; bucketSort(data); std::cout << "排序后: "; for (double d : data) std::cout << d << " "; std::cout << std::endl; return 0;} - 时间复杂度:理想情况下为 O(n + k),其中 n 是元素个数,k 是桶的数量。最坏情况(所有元素落入同一个桶)退化为 O(n²)。
- 空间复杂度:O(n + k),需要额外空间存储桶。
通过本教程,你已经掌握了C++排序教程中一个高效而实用的算法——桶排序。它特别适合处理均匀分布的小数数据。记住,桶排序实现的关键在于合理设计桶的数量和映射规则。多加练习,你就能灵活运用这一算法解决实际问题!
关键词:C++桶排序算法、桶排序实现、C++排序教程、桶排序原理
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128541.html