快排递归转非递归算法
QSort(L, low, high)
{
while(low < high)
{
pivotkey = partition(L, low, high);
QSort(L, low, pivotkey - 1);
QSort(L, pivotkey + 1, high);
}
}
求该代码转非递归算法
[解决办法]
未验证,仅参考
void QuickSort(int a[],int p,int q)
{
stack<int> st;
int j;
do{
while(p<q)
{
j=partition(a,p,q);
if( (j-p)<(q-j) )
{
st.push(j+1);
st.push(q);
q=j-1;
}
else
{
st.push(p);
st.push(j-1);
p=j+1;
}
}
if(st.empty()) return;
q=st.top();st.pop();
p=st.top();st.pop();
}while(1);
}