Python基礎排序-冒泡、選擇、插入

簡單冒泡排序

時間複雜度

O(n)->O(n*n)

原理

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

這裏寫圖片描述

圖片來自 By Swfung8 - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=14953478

實現

這裏寫圖片描述

優化

如果對[1,2,3,4,5,6,7,8]這樣一個列表進行排序的話,程序並不能識別它是一個已經排過序的列表。
如何進行改進?
可以打個標記
比如當上一次排序結束後,沒有發生交換,是否可以理解爲已經排序完成?

這裏寫圖片描述

簡單選擇排序

原理

  1. 通過元素的兩兩比較,找出極值固定在某一端。
  2. 先假設索引爲0的值爲最大,然後用這個值和其他值進行比較,找出最大值,記下索引。
  3. 通過索引將最大值和索引爲0(1,2,3,)的值交換位置。
  4. 針對所有的未排序的元素重複以上的步驟,除了最後一個。
    這裏寫圖片描述
    圖片來自 By Joestape89, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=3330231

實現

這裏寫圖片描述

優化

同時找出最大值和最小值,同時固定兩個值。
如果排序的數據中有相等的元素,當某一次的比較得到的最大值和最小值相等,是否可以理解爲排序完成
代碼
這裏寫圖片描述

簡單插入排序

原理

  1. 從第一個元素開始,該元素可以認爲已經被排序
  2. 取出下一個元素,在已經排序的元素序列中從後向前進行比較
  3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
  4. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
  5. 將新元素插入到下一位置中
  6. 重複步驟2~5
    這裏寫圖片描述
    By Swfung8 - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=14961606

實現

這裏寫圖片描述

優化

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