冒泡和選擇排序算法

冒泡排序

時間複雜度O(n2)O(n^2)

  • 冒泡排序的算法思路在於對無序表進行多趟比較交換
  • 每趟包括了多次亮亮相鄰比較,並將逆序的數據項互換位置,最終能將本趟的最大項就位
  • 經過n-1趟比較交換,實現整表排序
  • 每趟的過程類似於“氣泡”在水中不斷上浮到水面的過程

具體過程:

  • 第1趟比較交換,共有n-1對相鄰數據進行比較(一旦經過最大項,則最大項會一路交換到達最後一項);
  • 第2趟比較交換時,最大項已經就位,需要排序的數據減少爲n-1,共有n-2對相鄰數據進行比較;
  • 直到第n-1趟完成後,最小項一定在列表首位,就無需再處理了。
def bubbleSort(alist):
    for passnnum in range(len(alist) - 1, 0, -1):
        for i in range(passnnum):
            if alist[i] > alist[i + 1]:
                temp = alist[i]
                alist[i] = alist[i + 1]
                alist[i + 1] = temp


alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
bubbleSort(alist)
print(alist)

選擇排序

  • 選擇排序對冒泡排序進行了改進,保留了其基本的多趟比對思路,每趟都使當前最大項就位。
  • 但選擇排序對交換進行了削減,相比起冒泡排序進行多次交換,每趟僅進行1次交換,記錄最大項的所在位置,最後再跟本趟最後一項交換
  • 選擇排序的時間複雜度O(n2)O(n^2),比起冒泡稍優
    對比次數不變還是O(n2)O(n^2),交換次數減少爲O(n)O(n)
def selectionSort(alist):
    for fillslot in range(len(alist)-1,0,-1):
        positionOfMax = 0
        for location in range(1, fillslot+1):
            if alist[location]>alist[positionOfMax]:
                positionOfMax = location
        temp = alist[fillslot]
        alist[fillslot] = alist[positionOfMax]
        alist[positionOfMax] = temp

alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
selectionSort(alist)
print(alist)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章