Yaroslavskiy的双枢轴快速排序算法

时间:2014-02-16 13:58:42

标签: java algorithm sorting

我正在进行双轴快速排序我发现here(幻灯片中的第20页)

比较

  

Yaroslavskiy平均需要= 1.9 nnn。

     

Classic Quicksort需要= 2 n n n n n比较!

互换:

  

Yaroslavskiy算法的互换= 0.6 n nn

     

经典Quicksort的交换= 0.3 n nn

结果

  

数据类型----- comp ------- swap

     

int ------------- 591ns --------- 802ns

     

浮----------- ---------- 838ns 873ns

     

双------- 873ns ---------- 1047ns

     

char ---------- 593ns ----------- 837ns

/ *注意: - 上面的结果是纳秒,并使用intel core 2 duo * /

在java lang中执行

如果我们将交换和比较的成本结合起来,那么Classic Quicksort比Yaroslavskiy Quicksort更胜一筹 除非在字符串的情况下,我们使用指向交换的指针数组,需要88纳秒。这里Yaroslavskiy的算法利用1.9 n nn n比较,因为在字符串的情况下,与交换相比,比较过于昂贵。

我想知道为什么java使用Yaroslavskiy Quicksort?是内置库排序的主要焦点是字符串,如果它对其他数据类型不好?

2 个答案:

答案 0 :(得分:1)

我不知道你从哪里得到你的号码。根据{{​​3}}:

  

证明了对于Dual-Pivot Quicksort的平均数量       比较为2*n*ln(n),平均互换次数为0.8*n*ln(n),       而经典的Quicksort算法有2*n*ln(n)1*n*ln(n)       分别

看起来双枢轴总是更好。

答案 1 :(得分:0)

我在许多其他快速搜索中测试了双java的数据集快速排序。最低速度提高了10~15%。除了doublepivotness,它还使用了许多其他优化:

  • 5点支点选择
  • 小子阵列的插入排序降级
  • 数据属性检测(而非改组)