请使用分治策略编写一个程序,实现快速排序算法,并输出每次快排后的结果。测试数据为:11,9,3,61,5,1598,84。确保程序能够正确处理这些数据,并输出每次快排后的结果。
时间: 2024-10-11 15:08:35 浏览: 27
七种排序(冒泡,选择,归并,堆,直接插入,直接选择,快排)的C语言实现
快速排序是一种经典的分治算法,其基本思想是选择一个基准元素,然后将数组分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后递归地对这两部分进行排序。下面是用C++编写的快速排序算法,同时输出每次划分后的情况:
```cpp
#include <iostream>
#include <vector>
// 定义快速排序函数
void quickSort(std::vector<int>& arr, int left = 0, int right = -1) {
if (right < 0) {
right = arr.size() - 1;
}
// 如果子数组只有一个元素或者为空,直接返回
if (left >= right) {
return;
}
// 选取中间元素作为基准
int pivot = arr[(left + right) / 2];
int i = left, j = right;
while (i <= j) {
// 找到第一个比基准大的元素
while (arr[i] < pivot) {
++i;
}
// 找到第一个比基准小的元素
while (arr[j] > pivot) {
--j;
}
// 交换这两个元素
if (i <= j) {
std::swap(arr[i], arr[j]);
++i; // 移动索引 i 向右
--j; // 移动索引 j 向左
}
}
// 递归地对左右两个子数组进行排序
quickSort(arr, left, j);
quickSort(arr, i, right);
}
int main() {
std::vector<int> data = {11, 9, 3, 61, 5, 1598, 84};
std::cout << "Original array: ";
for (const auto& num : data) {
std::cout << num << " ";
}
std::cout << "\n";
quickSort(data);
std::cout << "Sorted array after first pass: ";
for (const auto& num : data) {
std::cout << num << " ";
}
std::cout << "\n";
// 输出每个分区的结果需要修改这里,因为快速排序是原地排序,不能直接输出每次分割后的数组
// 你可以添加一个临时数组存储分割过程中的结果,或者记录下每次分割的边界,然后复制子数组并打印
return 0;
}
```
注意:快速排序是原地排序,所以无法简单地跟踪每一步的结果。如果你希望观察整个排序过程,可能需要修改算法或使用其他数据结构来保存分割信息。上述代码仅仅展示了快速排序的基本逻辑。
阅读全文