递归的核心是栈;可构造辅助栈实现非递归。
#include<iostream> #include <stdio.h> #include <stack> #include <algorithm> using namespace std; int partion(int* arr, int low, int high) { if (low == high) { return low; } int part = arr[low]; while (low < high) { while (high > low && arr[high] >= part) { high --; } swap(arr[low], arr[high]); while (low < high && arr[low] <= part) { low ++; } swap(arr[low], arr[high]); } arr[low] = part; return low; } //递归写法 void quickSort1(int* arr, int low, int high) { if (low ==high) { return; } int part_index = partion(arr, low, high); if (part_index > low) { quickSort1(arr, low, part_index -1); } if (part_index < high) { quickSort1(arr, part_index + 1, high); } } //非递归写法 void quickSort2(int* arr, int low, int high) { stack<int> sk; if (low < high) { int part_index = partion(arr, low, high); if (low < part_index - 1) { sk.push(low); sk.push(part_index - 1); } if (part_index + 1 < high) { sk.push(part_index + 1); sk.push(high); } while (!sk.empty()) { int high_sk = sk.top(); sk.pop(); int low_sk = sk.top(); sk.pop(); part_index = partion(arr, low_sk, high_sk); if (low_sk < part_index - 1) { sk.push(low_sk); sk.push(part_index - 1); } if (part_index + 1 < high) { sk.push(part_index + 1); sk.push(high_sk); } } } } int main() { int a[8] = {4, 2, 6, 7, 9, 5, 1, 3};
// quickSort2(a, 0, 7); for(int i = 0; i < 8; i++) { cout << a[i] << endl; } return 0; }