我们的算法教授为我们提供了一项任务,要求我们选择稀有排序算法(例如Introsort,Gnomesort等)并对其进行一些研究。 维基百科肯定有很多关于此的信息,但我仍然不足以进行深入的研究。 因此,我想找到一本书,其中包括对那些罕见的排序算法的讨论,因为大多数教科书(如CLRS,我正在使用的)只讨论了一些基本的排序算法(例如冒泡排序,合并排序,插入排序)。 )。 是否有包含大量这些信息的书籍或网站? 谢谢!
答案 0 :(得分:11)
嗯,Edsger Dijkstra在Smoothsort中一个非常有趣的“罕见”排序算法。在纸面上它几乎是一个完美的类别:
O(n) best
O(n log n) average
O(n log n) worst
O(1) memory
n comparisons, 0 swaps when input is sorted
由于它的复杂性(很难优化),它是如此罕见。
你可以在这里阅读Dijkstra自己撰写的论文:http://www.cs.utexas.edu/users/EWD/ewd07xx/EWD796a.PDF
以下是wikipedia link和a very extensive article about smoothsort(作者Keith Schwarz)。
答案 1 :(得分:1)
Bitonic sort是O(N log ^ 2(N))(略微渐近地比quicksort更慢),但它是可平行的,具有高度规则的结构。这使您可以使用像SSE这样的SIMD向量指令集 - 提供恒定因子提升,这使其成为“底层”排序(而不是更常用的插入排序)的有趣选项。
答案 2 :(得分:1)
你可以说稀有排序的排序之一是timsorting,它在有排序部分的数组中效果很好,最好的情况是O(n),最差和平均情况是O(n log n)。
另一种快速排序方法是bitonic sorting,它是几乎所有并行排序算法的基础。你可以在网上找到成千上万的论文,还有一些像Parallel algorithm of Quinn这样的书,你可以找到它的扩展讨论,以及这个算法的相关变体。
同样Art of computer programming第3卷对排序策略进行了很好的讨论。