快速排序partition的写法

1.本科时候,严老师的那本书上给的写法

int partition(int A[],int left,int right){
     if(left >= right)
          return left;
     int x = A[left];
     while(left < right){//left should be less than right. left is overwritten....
          while(left < right && A[right] > x)
               --right;
          A[left] = A[right];//left is overwritten 
          while(left < right && A[left] >= x)
               ++left;
          A[right] = A[left];//left is empty now and should be overritten by next loop or end loop;
     }
     A[left] = x;
     return left;
}

left,right 分别可以存储元素。区间表示为 A[left,right]
思想很简单:把枢轴量保存下来,这个时候 left 空闲,分别从尾部和头部开始查找,找到第一个比枢轴量大的值,放在前面空闲的位置,然后从头开始找一个大于枢轴量的值放在后面。
结果这一轮之后, left 表示为空闲的位置, right 表示结尾位置。和最开始情况一样,这样就维持了一个循环不变量。
关于里面的各个部分等号是否能够取得的问题,最简单的方式,就是拿一个比较小的数组进行测式,比如大小为2的数组。

返回的结果: A[le

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值