排序算法复习之一趟快速排序算法:为什么说关键字所占的位置是多余的

思路:

         49  38   65  97 76 13 27

先说自己的想法:

 

首先看38,发现38比49小,所以换位:

 

        38 49 65  97 76 13 27 

 

这个时候发现65,按理说应该把65放最后面,或者说与27交换位置,变为:

 

        38  49 27 97 76 13 65

 

这个时候,发现27,27比49小,所以交换位置为:

 

       38 27 49  97 76 13 65

 

这个时候发现97,我们换97与后面比49小的。

 

       38  27 49 13 76 97 65

这个时候发现13,我们换:

 

        38 27 13 49 76 97 65

 

后面没有比49 小的了。终止。

 

我们发现:

         每次我们总是从前面找一个比49大的,,从后面找一个比49小的,然后调换他们的位置。

         

         我们发现:这个49所占的位置,是多余的,这个位置可以用来进行交换高低位:

 

再次变为如下过程:

 

        49 38 65 97 76 13 27

 

先从后往前找:

 

        找到一个27,比49 小,序列变为:

 

        27 38 65 97 76 13 27

 

然后从前往后找:

 

       找到一个65,比49大,这个时候把最后一个变为65:

 

       27 38 65 97 76 13 65

 

关键之处就在于:黄色字所表示的地方正是原来49所占的位置。

 

再从后往前找。。再找一个比49小的,那就是13:

 

      变为:

 

         27 38 13 97 76 13 65

 

再从前往后找:

 

         找到97比49大,那么,变为:

 

         27 38 13 97 76 97 65

 

再从后往前找,一直找到橙色97为止:也就是low的指向:

 

直到 low=high

       这就是快速排序一趟,这个时候我们将橙色97置为49,函数返回它的位置作为分割点。设为partitio

 

(low,partition-1) 和 (partition,high)两个区间。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值