簡體   English   中英

插入排序中的比較數

[英]Number of comparisons in insertion sort

在此程序中,我想計算插入排序中的數據比較次數,但是我的代碼無法正常工作。

def insertionSort(list):
    numOfComp = 0
    for i in range(1,len(list)):
        value = list[i]
        j = i - 1
        while j>=0:
            if value < list[j]:
                list[j+1] = list[j]
                list[j] = value
                j = j - 1
                numOfComp += 1
            if value >= list[j]:
                numOfComp += 1
                j = j - 1
            else:
                break
    print("Number of data comparisons:",numOfComp)
    print("Sorted list:",list)

問題是

if value >= list[j]:
     numOfComp += 1
     j = j - 1

如果value >= list[j]您可以並且應該簡單地退出while循環並停止進一步的比較

另外,您要重復兩次比較,請參見以下精煉代碼

def insertionSort(list):
    numOfComp = 0
    for i in range(1,len(list)):
        value = list[i]
        j = i - 1
        while j>=0:
            if value<list[j]:
                flag=True
            else :
                flag=False
            numOfComp += 1
            if flag:
                list[j+1] = list[j]
                list[j] = value
                j = j - 1
            else:
                break
    print("Number of data comparisons:",numOfComp)
    print("Sorted list:",list)

不要忘了循環頭執行的次數比循環主體(我們稱為退出條件)多執行+1,請看以下示例:

S = 0;
for(int i = 0; i < 5; i++) {
    S++;
}

S ++運行5次 ,但是i <5運行6次,最后一個是檢查i <5是否會發現錯誤並退出循環。

暫無
暫無

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

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