void qsort(vector<int> &arry, int lo, int hi)
{
if(lo >= hi) //递归出口
return;
int j = partition(arry, lo, hi); //获取j的位置,分区
qsort(arry, lo, j-1); //左区分治
qsort(arry, j+1, hi); //右区分治
}
int partition(vector<int> &arry, int lo, int hi)
{
int i=lo, j=hi+1; //注意是 j = hi+1;
int base = arry[lo];
while(true)
{
while( j>lo && base < arry[--j] ); //从后面找比base小的元素, 注意下标不要越界
while( i<hi && base > arry[++i] ); //从前面找比base大的元素
if( i >= j)
break;
swap(arry[i], arry[j]);
}
swap(arry[lo], arry[j]); //确定j的位置
return j;
}