【发布时间】:2017-07-18 18:24:35
【问题描述】:
我已经实现了双向冒泡排序算法。但我想不出双向冒泡排序比标准冒泡排序更好的场景……有人能给我一些线索吗?
我在 Python 中的实现:
def bubbleSort_v(my_list):
s = 0
e = 0
right = True
for index in range(len(my_list)-1,0,-1):
if right:
right = False
for idx in range(s,index+e,1):
if my_list[idx] > my_list[idx+1]:
my_list[idx],my_list[idx+1] = my_list[idx+1],my_list[idx]
s += 1
else:
right = True
for idx in range(index-1+s,e,-1):
if my_list[idx] < my_list[idx-1]:
my_list[idx],my_list[idx-1] = my_list[idx-1],my_list[idx]
e += 1
return my_list
谢谢!
【问题讨论】:
-
在所有情况下都很糟糕
-
维基百科上的介绍和“与冒泡排序的区别”都通过示例讨论了您的问题。 en.wikipedia.org/wiki/Cocktail_shaker_sort
-
朋友不要让朋友使用冒泡排序。研究冒泡排序家族的唯一原因是因为它们易于理解,而且通常很容易解释为什么几乎所有其他排序算法都更胜一筹(当然,不包括像 bogosort 这样疯狂的东西)。
-
@GarrGodfrey 不是全部。如果您的数据已经排序或接近排序,则可以接受冒泡排序。也许仍然不是最好的选择,但至少不是糟糕。
-
Mark Ransom 所说的。 OTOH,Python 出色的 TimSort 也非常擅长对包含已排序序列的数据进行排序。因此,如果您有一个排序列表并将随机内容附加(或插入)到它并重新排序,TimSort 将有效地处理这项工作。同样,它将有效地合并来自已连接在一起的一堆排序列表的数据。
标签: python algorithm bubble-sort