今天研究了一下快速排序如何用非递归算法解决。下面代码,自认为非常简洁,通过简单测试没有发现任何问题,供大家参考。
本程序利用了“栈”
代码如下:
#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;
}