快速排序【NOTE】

分治递归思想:

    选序列中一个数位基准,把所有小于它的数放在它左边,把所有大于它的数放在它右边。

    操作完后 对这个数左边的区间 和 右边的区间 进行相同操作

    直到 最后排序的区间只有一个数。


代码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.youkuaiyun.com/morewindows/article/details/6684558


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值