用c++写分治法快速排序,要求数据量小于40时用冒泡排序
时间: 2024-09-28 19:12:00 浏览: 38
在C++中,你可以结合分治策略(Divide and Conquer)实现快速排序算法,这是经典的排序算法之一。然而,当数据量较小(如小于40)时,为了提高效率,可以采用简单直观的冒泡排序作为辅助处理。下面是一个简化的例子,展示了如何分别实现快速排序和冒泡排序,并在适当的时候切换:
```cpp
#include <iostream>
#include <vector>
// 冒泡排序函数
void bubble_sort(std::vector<int>& arr, int size) {
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
std::swap(arr[j], arr[j + 1]);
}
}
}
}
// 快速排序函数(递归实现)
void quick_sort(std::vector<int>& arr, int low, int high) {
if (low < high) {
// 分治:取基准值并划分区间
int pivot_index = partition(arr, low, high);
// 对左右两个部分分别递归排序
quick_sort(arr, low, pivot_index - 1);
quick_sort(arr, pivot_index + 1, high);
}
}
// 划分子区间函数
int partition(std::vector<int>& arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; ++j) {
if (arr[j] < pivot) {
++i;
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[i + 1], arr[high]);
return i + 1;
}
// 主函数示例
int main() {
const int data_size = 30; // 小于40的数据规模假设
std::vector<int> arr(data_size, 0); // 生成随机数组
// 如果数据量小,直接使用冒泡排序
if (data_size < 40) {
bubble_sort(arr, data_size);
} else {
quick_sort(arr, 0, arr.size() - 1);
}
// 打印排序后的数组
for (const auto& num : arr) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
阅读全文