c++ 快速排序非递归
时间: 2023-09-22 19:09:08 浏览: 108
非递归快速排序
4星 · 用户满意度95%
你可以使用迭代实现快速排序的非递归版本。下面是一个示例代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
// 交换两个元素的值
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// 快速排序非递归实现
void quickSort(int arr[], int low, int high) {
stack<int> stk;
stk.push(low);
stk.push(high);
while (!stk.empty()) {
high = stk.top();
stk.pop();
low = stk.top();
stk.pop();
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]);
if (i + 1 < high) {
stk.push(i + 2);
stk.push(high);
}
if (i + 1 > low) {
stk.push(low);
stk.push(i);
}
}
}
// 打印数组
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[] = {5, 2, 8, 12, 3, 7};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "原始数组: ";
printArray(arr, size);
quickSort(arr, 0, size - 1);
cout << "排序后数组: ";
printArray(arr, size);
return 0;
}
```
这段代码使用了一个栈来模拟递归调用的过程。在每一次循环中,取出栈中保存的low和high值,然后进行快速排序的划分操作。如果划分后的左半部分和右半部分的长度大于1,就将新的low和high值压入栈中,以便后续继续排序。通过循环不断处理栈中的任务,直到栈为空,即完成了整个排序过程。
注意,这段代码只是一个示例,实际使用时可能需要根据具体情况进行适当的修改和优化。
阅读全文