簡體   English   中英

Python 3:優化的冒泡排序

[英]Python 3: Optimised 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',一個bubbleSortPlus函數,其中氣泡在兩個方向上傳播:從左到右,緊接着是從右到左的旅行。 理論上,在每次傳球中,應該縮短氣泡的行程(在變量中保存行程中最后一次交換的位置,並使下一次行程從該位置開始。我努力但我只是一條蟒蛇新手,請幫忙。

我猜它已被優化了...天真的冒泡排序不包括swap標志。 因此,在任何情況下完成所有O(n ^ 2)比較之前它不會返回。 但是使用swap標志,如果輸入序列已經“幾乎排序”,則比較的數量幾乎是線性的。

這是一些框架代碼,顯示如何向前和向后掃描數組,同時縮小每次迭代的列表。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM