Python 3:优化冒泡排序

时间:2016-05-18 01:50:50

标签: python algorithm python-3.x bubble-sort

请帮忙。我需要优化我的冒泡排序算法,以便比非优化的bubbleSort获得更少的总比较。我设法创建了正常的冒泡排序(仅从左到右):

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&#39 ;,一个bubbleSortPlus函数,其中气泡在两个方向上传播:从左到右,紧接着是从右到左的旅行。理论上,在每次通过中,应该缩短气泡的行程(保存变量中行程中最后一次交换的位置,并使下一次行程从该位置开始。我努力但我只是一个蟒蛇新手,请帮忙。

2 个答案:

答案 0 :(得分:0)

我猜它已经过优化...... 天真的冒泡排序不包括swap标志。因此,在任何情况下完成所有O(n ^ 2)比较之前它不会返回。但是使用stdin.on("error")标志,如果输入序列已经“几乎排序”,则比较的数量几乎是线性的。

答案 1 :(得分:0)

这里有一些骨架代码,展示了如何向前和向后扫描数组,同时缩小每次迭代的列表。

values = 100,101,102,103,104,105

start = 0
stop = len(values)-1

while stop > start:
    for i in range(start, stop):
        print i, "compare", values[i], "with", values[i+1]
    print "moved a large value to index", stop
    print

    stop = stop - 1
    if stop == start:
        break

    for i in range(stop, start, -1):
        print i, "compare", values[i], "with", values[i-1]
    print "moved a small value to index", start
    print

    start = start + 1