【数据结构】——冒泡排序、插入排序、选择排序
生活随笔
收集整理的這篇文章主要介紹了
【数据结构】——冒泡排序、插入排序、选择排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# 冒泡排序,復雜度為O(n^2)
def bubble_sorted(li:list)->list:for i in range(len(li)):# 第幾趟exchanged = False# 這個是為了防止多余的遍歷,如果前面的元素已經是排序好的,那就不需要再進行比較了,減少運行時間for j in range(len(li)-1):# 遍歷列表元素if li[j] > li[j+1]:li[j],li[j+1] = li[j+1],li[j]exchanged = Trueif not exchanged:return li# 選擇排序,復雜度為O(n^2),思路是遍歷一趟元素后,選擇最小的值放在無序區的第一位
def select_sorted(li:list)->list:for i in range(len(li)):min_loc = i# 初始化最小值的位置為第一個for j in range(i+1,len(li)-1):if li[j]<li[min_loc]:li[j],li[min_loc] = li[min_loc],li[j]# 交換元素return li# 插入排序,復雜度為O(n^2),思路是從左到右抽取一個元素,將這個元素,與左邊鄰近的元素比較,若比左邊的小,則左邊元素右移,
# 若不比左邊的小了或者已經到最左邊了,則將抽取的元素賦值給原本左邊元素
def insert_sorted(li:list)->list:for i in range(1,len(li)):# 趟數,也就是抽牌的順序,從第一張牌開始抽tmp = li[i]j = i - 1# 左邊元素while j >= 0 and li[i] < li[j]:# 若抽取的元素小于鄰近左邊的元素,則將左邊元素右移一格li[j+1] = li[j]j -= 1# 這時候的j已經不滿足上述條件了,因此這個j位置上的元素沒有移動,而j+1上位置的元素移動了是空的li[j+1] = tmpreturn lidef insert1_sorted(li:list)->list:for i in range(1,len(li)):# 趟數,也就是抽牌的順序,從第一張牌開始抽tmp = li[i]for j in range(i - 1,1):if li[i] < li[j] and (li[i] > li[j - 1]):li[j+1] = li[j]li[j] = tmpreturn liif __name__ == '__main__':li = [9,3,7,1,4,2,5,8]print(bubble_sorted(li))print(select_sorted(li))print(insert_sorted(li))print(insert1_sorted(li))
?
總結
以上是生活随笔為你收集整理的【数据结构】——冒泡排序、插入排序、选择排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu安装pycharm并且激活
- 下一篇: 【VS插件】VS2012设置透明背景