非递归快速排序
快速排序的非递归实现使用了一个显式的下推栈,使用向栈中压入参数和过程调用/退出不断地从栈中弹出参数来替代递归调用,这个过程继续直到栈为空.我们把两个子数组中的较大者压入栈中来确保最大栈的深度为lgN,如果对N个元素进行排序.
void qsort(int a[], int left, int right)
{
int i;
//定义栈s
stack<int> s;
//先判断栈是否为空
while(!s.empty())
{
//若栈不为空,将栈中元素移出
s.pop();
}
//将right入栈
s.push(right);
//将left入栈
s.push(left);
//while循环,当栈为空时,循环结束
while(!s.empty())
{
//元素left出栈
left = s.top(), s.pop();
//元素right出栈
right = s.top(), s.pop();
//判断left与right的关系,如果left>=right,continue
if(left >= right)
{
continue;
}
//作划分
i = partion(a, left, right);
//比较两个子数组的大小
//将子数组中的较大者压入栈
if((i-1-left) > (right-i-1))
{
s.push(i-1);
s.push(left);
s.push(i+1);
s.push(right);
}
else
{
s.push(i+1);
s.push(right);
s.push(i-1);
s.push(left);
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。
注:相关教程知识阅读请移步到C++教程频道。










