void push2(stack<int>& s, int l, int r)
{
s.push(r);//先进后出
s.push(l);//后进先出 即栈顶
}
void quickSort(int a[], int l, int r)
{
stack<int> s;
push2(s, l, r);
int lwalker, rwalker, mid;
while (!s.empty())
{
int left = s.top(); s.pop();
int right = s.top(); s.pop();
lwalker = left;
rwalker = right;
mid = a[lwalker/*(lwalker+rwalker)/2*/];
while (lwalker < rwalker)
{
// 向右找到一个满足交换条件的值
while (a[lwalker] < mid) {
lwalker++;
}
//向左找到一个满足交换条件的值
//注意这里的满足交换条件的值 实际是不满足这个while循环条件的值
//所以只要不满足这个while循环条件 即视为该交换的值
//此时 下标指向第一个不满足while条件的值 然后立即执行值交换
while (a[rwalker] > mid) {
rwalker--;
}
//这个if条件多余 因为外部大while 已经判断过了 等于条件 也就没必要交换 所以多余
//if (lwalker <= rwalker)
{
int tmp = a[lwalker];
a[lwalker] = a[rwalker];
a[rwalker] = tmp;
lwalker++;
rwalker--;
}
cout << "=>";
for (int i = 0; i < 11; i++) {
cout << a[i] << " ";
}
cout << endl;
}
if (lwalker < right) //右区间
push2(s, lwalker, right);
if (rwalker > left) //左区间
push2(s, left, rwalker);
}
}