Shell排序或奇偶换位?
在我的测试中,偶数换位排序更快,更正确吗?
答案 0 :(得分:3)
这取决于您的数据布局。
但是QuickSort
是一个非常通用的排序算法,如果你要排序的东西不是很大。如果您计划对大量数据进行排序,那么您需要具有中间内存的内容,例如MergeSort
。
答案 1 :(得分:1)
如果我没记错的话,奇偶排序与冒泡排序非常相似,但它可以并行执行。
在单个CPU核心上,Shell排序通常更好,但bubble / odd-even可能在小数据集上获胜。
答案 2 :(得分:1)
在大多数情况下,编写自己的排序算法没有意义。几乎每个环境都有内置排序,应该是您的首选。对于最差的数据(在单个核心上),奇偶换位为O(n ^ 2)。
答案 3 :(得分:0)
对于大型数组,Shell排序更快。在看到数组之前需要多大的数据取决于两种算法的实现。
答案 4 :(得分:0)
在大多数非平凡的情况下,确实对您自己的排序算法进行编码是有意义的,但并非所有情况都是非平凡的。这完全取决于您知道关于被排序数据的内容。甚至有些情况下,bubblesort是一个有效的选择(或者甚至是最优的)。
答案 5 :(得分:0)
可以使用许多variants的初始间隙大小实现Shell排序,并在每个步骤中减少它。原始算法是O(n^{3/2})
,但Hilberd,Sedgewick和Ciura提出了一些改进。因此,如果你问哪个更好,你必须总是说你使用哪个实现。因此,单个核心shell排序应该在每个足够大的数据集上获胜。在多核上可能会赢得奇偶排序,因为它可以使用更多的处理单元。