Cocktail排序总是比Bubble排序好吗



如果我必须对数组进行排序,并且必须在Bubble sort和Cocktail sort之间进行选择,那么使用Cocktail排序总是更好的吗?如果没有,我应该如何决定使用哪种算法?

使用Cocktail Sort 总是更好吗

否。反例是[9,10,0,1,2,3,4,5,6,7,8]

Bubble Sort需要两次通过才能将10和9移动到它们的最终位置,在第三次通过时,它将看到阵列被排序并退出(如果实现了此优化)。

Cocktail Sort将在第一次向前传球时将10移动到其最终位置,然后执行向后传球,0移动到其最后位置。在下一个正向过程中,9被移动(进一步)到其最终位置,然后后面的反向过程什么都不做,因此算法可以退出。

所以Bubble sort传球3次,Cocktail传球4次(2次向前+2次向后)。

一个更极端的例子是[1,2,3,4,5,6,7,8,9,10,0]

Bubble排序将需要10或11次传递来对数组进行排序,而Cocktail排序只需要3次。

对于随机数组,Cocktail预计会快一点(或者更好:慢一点)。如维基百科所述:

虽然它通过更快地将项目移动到列表的开头来改进冒泡排序,但它只提供了边际性能改进。

。。。和:

它可以实现比标准气泡排序稍好的性能。原因是气泡排序只在一个方向上通过列表,因此每次迭代只能将项目向后移动一步。

你问:

如果没有,我应该如何决定使用哪种算法?

差异不显著。它在某些类别的输入方面表现良好。例如,上面维基百科的文章提到:

如果每个元素都位于与它将要结束的位置相差最多(≥1)的位置,则鸡尾酒摇壶排序的复杂性变为O()。

但是,如果您的数组是完全随机的,没有这些特征,并且可能会变大,那么不要选择这些较差的排序算法中的任何一种。请参阅维基百科上基于比较的排序算法列表。