分治递归思想:
选序列中一个数位基准,把所有小于它的数放在它左边,把所有大于它的数放在它右边。
操作完后 对这个数左边的区间 和 右边的区间 进行相同操作
直到 最后排序的区间只有一个数。
代码1实现思想:
void qsort(vector<int>& v,int left,int right){ //left表示要排序区间的最左端,对于第一次操作,就是v[0]。right和left不能少,否则无法划定区域以递归
if(left < right){
int i = left,j = right,x = v[left];
while(i < j){
//把所有小于基准的数放在它左边
while(i < j && x > v[j]){
j--;
}
if(i < j){
v[i++] = v[j];
}
<pre name="code" class="cpp"> //把所有大于基准的数放在它右边
while(i < j && x < v[i]){i++;}if(i < j){v[j--] = v[i];}}v[i] = x;//两个放数的操作完了之后 i和j都会等于区间中间的那个index,即最后基准数所应在的位置qsort(v,left,i-1);qsort(v,i+1,right);}}
参考:白话经典算法系列之六 快速排序 快速搞定
http://blog.csdn.net/morewindows/article/details/6684558