# 冒泡排序,復雜度為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))
?