排序和搜索(五)——選擇排序的python實現

選擇排序:先指定最大數據所在的位置爲0,第一次遍歷比較其他位置數據與0上數據的大小,如果大於,則替換改位置爲最大數據位置,遍歷結束,交換數據(python列表爲最大數據與列表最後數據交換)。回到初始指定位置0,進行第二次遍歷(第一次遍歷得出的最大數據不參與第二次遍歷),直至剩列表最後一個數據

【分析】雖然和冒泡排序一樣,選擇排序的時間複雜度仍然是O(n^2),但是數據交換次數比冒泡排序要少~~

【數據】

54,26,93,17,77,31,44,55,20

【要求】:升序排序

【代碼】:

#選擇排序
def selectionSort(alist):
    last=len(alist)-1
    count=0
    while last>0:
        # 設定初始最大值所在的位置爲0
        #必須放在循環裏面,不然第一個位置就沒法參與排序
        maxPosition = 0
        for i in range(1,last+1):
            if alist[i]>alist[maxPosition]:
                # 替換最大值所在的位置
                maxPosition=i
        if alist[last]!=alist[maxPosition]:
            #交換最大值和最後位置的數據
            temp=alist[last]
            alist[last]=alist[maxPosition]
            alist[maxPosition]=temp
            count=count+1
        last=last-1
    print('選擇排序的數據交換次數爲',count,'次')
    return alist
# print(selectionSort([5,2,3,8,4,9,1,1,1,1,11,1,15,6,4,8,9,7,5,1,4,6,1,3,4,999,7,8,78,7,9,5,5]))
print(selectionSort([54,26,93,17,77,31,44,55,20]))

【結果展示】:

選擇排序的數據交換次數爲 6 次

[17, 20, 26, 31, 44, 54, 55, 77, 93]

#如果沒有最後的判斷,數據交換次數爲8次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章