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、递归之。
流程图: