快速排序之三数中值分割法

枢纽元:与其他数做大小比较作用,作为一个中间参考值。

步骤:

1.       通过选取第一个元素、最后一个元素和最中间一个元素的中间值作为枢纽元。

2.       将枢纽元与最后一个元素交换位置。

3.       i指向第一个元素,j指向倒数第二个元素(最后一个元素为枢纽元)。

4.       i向右移直到i指向的元素大于等于枢纽元就停止移动。(跳过那些小于枢纽元的元素,这样就能保证比枢纽元小的元素在右边)

5.       j向左移直到j指向的元素小于等于枢纽元就停止移动。(跳过那些大于枢纽元的元素,这样就能保证比枢纽元大的元素在左边)

6.       如果i与j交错(即i在j的右边,在此之前i一直在j的左边),就跳至第8步。

7.       交换i与j指向元素的位置(小于等于枢纽元的元素放右边,大于等于枢纽元的元素放左边),i向右移动一个单位,j向左移动一个单位。重复4、5、6步骤。

8.       换i指向的元素和最后枢纽元的位置。分别对枢纽元前面的元素(小于等于枢纽元)和后面的元素(大于等于枢纽元)进行同样的上述步骤(递归)。

 

注意:当集合中的元素个数小于等于2个的时候,就直接进行判断。

上述步骤可以做适当改动。

选取枢纽元特别重要。

自己列举几个例子按照上面的步骤走几遍。

可以动手编程实践,实现三数中值分割法的快速排序。(很有意义)

禁止转载!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值