红本算法书 快排算法
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; }