我正在进行双轴快速排序我发现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?是内置库排序的主要焦点是字符串,如果它对其他数据类型不好?
答案 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,它还使用了许多其他优化: