zoukankan      html  css  js  c++  java
  • Java集合(14)--双枢轴快速排序(DualPivotQuicksort)

    JDK1.7  java.uti.Arrays开始使用DualPivotQuicksort作为默认排序方法

    详细讲解链接:http://www.tuicool.com/articles/BfY7Nz

    算法思想:

    选出两个枢轴P1和P2,需要3个指针L,K,G

    3个指针的作用如下图:

    算法为以下的步骤:(数组大小小于286时,使用DualPivotQuicksort

    1、 小于47的数组,使用插入排序。

    2、选择枢轴P1和P2。(假设使用数组头和尾)。

    3、P1需要小于P2,否者交换。

    现在数组被分成4份,left到L的小于P1的数,L到K的大于P1小于P2的数,G到rigth的大于P2的数,待处理的K到G的中间的数(逐步被处理到前3个区域中)。

    //关键算法部分

    4、L从开始初始化直至不小于P1,K初始化为L-1,G从结尾初始化直至不大于P2。K是主移动的指针,来一步一步吞噬中间区域。

    ****当大于P1小于P2,K++。

    ****当小于P1,交换L和K的数,L++,K++。

    ****当大于P2,如果G的数小于P1,把L上的数放在K上,把G的数放在L上,L++,再把K以前的数放在G上,G--,K++,完成一次L,K,G的互相交换。否则交换K和G,并G--,K++。

    5、递归4。

    6、交换P1到L-1上。交换P2到G+1上。

    7、递归之。

    流程图:

  • 相关阅读:
    登录认证
    json
    关于优化
    网站资源
    设计模式
    Python
    查兰IP
    Linux命令
    centos7.0KVM虚拟化
    Shell数组
  • 原文地址:https://www.cnblogs.com/pipi-style/p/4738072.html
Copyright © 2011-2022 走看看