C++ 快速排序非递归实现 实验要求: 将数组 23,45,17,11,13,89,72,26,3,17,11,13,利用非递归算法,用栈模拟快速排序递归算法,实现数组从小到大排序。
时间: 2024-09-22 11:10:22 浏览: 52
快速排序 --- 非递归实现
在C++中,快速排序是一种经典的排序算法,通常采用递归实现,但在实验要求中,我们需要的是非递归的版本,即使用栈来模拟递归过程。以下是通过栈实现快速排序的一个简单示例:
```cpp
#include <iostream>
#include <stack>
using namespace std;
void quickSort(int arr[], int low, int high) {
stack<int> s;
s.push({low, high});
while (!s.empty()) {
int end = s.top().second;
s.pop();
int pivot = arr[end];
int i = low - 1;
for (int j = low; j <= end - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(arr[i], arr[j]);
}
}
arr[i + 1] = pivot;
// 分割左右部分并入栈
s.push({low, i});
s.push({i + 2, end});
}
}
// 打印数组
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
int main() {
int data[] = {23, 45, 17, 11, 13, 89, 72, 26, 3, 17, 11, 13};
int n = sizeof(data) / sizeof(data[0]);
quickSort(data, 0, n - 1);
cout << "Sorted array is: \n";
printArray(data, n);
return 0;
}
```
在这个代码中,我们创建了一个栈,用于存储分割点。每次从栈顶弹出一个结束位置,然后选择该位置的元素作为枢轴,将小于枢轴的元素移动到左边,并更新枢轴的位置。之后,继续对左右两个子区间重复这个过程,直到栈为空。最后得到的数组就是排序后的结果。
阅读全文