快速排序—三快排 vs 双基准.docVIP

  • 53
  • 0
  • 约1.34万字
  • 约 10页
  • 2016-12-12 发布于河南
  • 举报
快速排序—三路快排 vs 双基准 快速排序被公认为是本世纪最重要的算法之一,这已经不是什么新闻了。对很多语言来说是实际系统排序,包括在Java中的Arrays.sort。 那么快速排序有什么新进展呢? 好吧,就像我刚才提到的那样(Java 7发布两年后)快速排序实现的Arrays.sort被双基准(dual-pivot)排序的一种变体取代了。 HYPERLINK /p.java.openjdk.core-libs.devel/2628 \t _blank 这篇文章不仅展示了为什么这个变化如此优秀,而且让我们看到Jon Bentley和Joshua Bloch的谦逊。 我当时做了什么? 与所有人一样,我想实现这个算法并且对一千万个数值排序(随机数据和重复数据)。奇怪的是,我得到了下面的结果: 随机数据: 基本排序:1222ms。 三路(Three-way)快速排序:1295ms(我是认真的!)。 双基准快速排序:1066ms。 重复数据: 基本排序:378ms。 三路快速排序:15ms。 双基准快速排序:6ms。 愚蠢的问题1 我担心自己在实现三路快速排序的时候遗漏了什么。在多次执行随机输入一千万个数值后,可以看到单点排序始终运行更良好。尽管在执行一千万个数值的时候差距小于100ms。 我现在明白了,用三路快速排序作为默认排序工具的目的。因为在重复数值时,它的时间复杂度没有0(n2

文档评论(0)

1亿VIP精品文档

相关文档