非递归的实现一般都是基于栈实现。
代码:
#include <iostream>
#include<vector>
#include<stack>
using namespace std;
int parti(vector<int>& vec,int begin,int end){
int i = begin;
int j = end;
int x = vec[begin];
while(i<j){
while(i<j && vec[j] >= x){
j--;
}
if(i<j){
vec[i] = vec[j];
i++;
}
while(i<j && vec[i] <= x){
i++;
}
if(i<j){
vec[j] = vec[i];
j--;
}
}
vec[i] = x;
return i;
}
int main(){
vector<int> vec = {2,5,67,7,6,4,5,8,9};
stack<int> s;
s.push(0);
s.push(vec.size()-1);
while(!s.empty()){
int end = s.top();
s.pop();
int begin = s.top();
s.pop();
if(begin<end){
int num = parti(vec,begin,end);
if(num>begin){
s.push(begin);
s.push(num-1);
}
if(num<end){
s.push(num+1);
s.push(end);
}
}
}
for(auto v:vec){
cout << v << " ";
}
cout << endl;
}