【发布时间】:2016-05-18 01:50:49
【问题描述】:
请帮忙。我需要优化我的冒泡排序算法,以便获得比未优化的冒泡排序更少的总比较。我设法创建了“普通冒泡排序”(仅从左到右移动):
def bubbleSort(values):
n = len(values) - 1
swap = True
ncomp = 0 # My total comparisons counter
while swap:
swap = False
for i in range(n): # i = 0, 1, 2, ..., n-1
ncomp += 1
if values[i] > values[i+1]:
temp = values[i]
values[i] = values[i+1]
values[i+1] = temp
swap = True
return values, ncomp
所以基本上我不知道如何创建一个“优化的bubbleSort”,一个bubbleSortPlus 函数,其中气泡在两个方向上传播:从左到右,紧接着是从右到左的传播。理论上,在每次通过时,气泡的行程都应该缩短(将行程中最后一次交换的位置保存在一个变量中,并使下一次行程从该位置开始。我很努力但我只是一条蟒蛇新手,请帮忙。
【问题讨论】:
-
请参阅How to debug my Bubble Sort code? 那里您会发现随着时间改变内部循环计数的优化。您正在谈论的优化根本无济于事,因为 2 遍将相互影响。更不用说开销了,所以结果要么是错误的(如果没有正确编码)要么比以前慢。
标签: python algorithm python-3.x bubble-sort