首页 > 编程语言 > 详细

Java集合(14)--双枢轴快速排序(DualPivotQuicksort)

时间:2015-08-18 00:57:10      阅读:504      评论:0      收藏:0      [点我收藏+]

 

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、递归之。

 

流程图:

 

技术分享

 

Java集合(14)--双枢轴快速排序(DualPivotQuicksort)

原文:http://www.cnblogs.com/pipi-style/p/4738072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!