快速排序非递归版实现

来源:互联网 发布:电力系统知乎 编辑:程序博客网 时间:2024/05/17 06:09

今天研究了一下快速排序如何用非递归算法解决。下面代码,自认为非常简洁,通过简单测试没有发现任何问题,供大家参考。

本程序利用了“栈”

代码如下:

#include <iostream>#include <stack>#include <iterator>#include <algorithm>using namespace std;int partition(int data[],int lo,int hi) {int v=data[lo];while(lo<hi) {  while(lo<hi && data[hi]>=v) hi--;data[lo]=data[hi];while(lo<hi && data[lo]<=v) lo++;data[hi]=data[lo];}data[lo]=v;return lo; }void QuickSort_1(int data[],int lo,int hi) {stack<int> st;int key;do {while(lo<hi) {key=partition(data,lo,hi);   st.push(lo);st.push(key-1);lo=key+1; }if(st.empty()) return;hi=st.top();st.pop();  lo=st.top();st.pop();  } while(true);}void QuickSort_2(int data[],int lo,int hi) {stack<int> st;int key;while(lo<hi || !st.empty()) {if (lo<hi) {key=partition(data,lo,hi);   st.push(lo);st.push(key-1);lo=key+1; } else {hi=st.top();st.pop();  lo=st.top();st.pop();}}  }int main() {int arr[] = {1,1,1,1,1,1,4,2,3,1};int n = sizeof(arr) / sizeof(int);QuickSort_1(arr, 0, n-1);//QuickSort_2(arr, 0, n-1);copy(arr, arr+n, ostream_iterator<int>(cout, " "));cout<<endl;return 0;}