目錄
冒泡排序
冒泡排序(最好是O(n), 最壞O(n2))
原理:
拿自己與上面一個比較,如果上面一個比自己小就將自己和上面一個調換位置,依次再與上面一個比較,第一輪結束後最上面那個一定是最大的數
時間複雜度:O(n²)
空間複雜度:O(1)
穩定性:穩定
冒泡排序代碼
def bubble_sort(blist):
count = len(blist)
for i in range(0, count):
for j in range(i + 1, count):
if blist[i] > blist[j]:
blist[i], blist[j] = blist[j], blist[i]
return blist
blist = bubble_sort([4,5,6,7,3,2,6,9,8])
print(blist)
選擇排序
- 先假定第一個是最小的,依次與其他數比,如果其他數中有比第一個數小就假定這個更小的最小
- 再比,第一輪就可以找到最小的那個放到0號位置,然後在假定1號位置數最小與剩下比較,再找到第二小的數放到第1號位置
時間複雜度:O(n²)
空間複雜度:O(1)
穩定性:不穩定
選擇排序代碼
def select_sort(slist):
for i in range(len(slist)):
x = i
for j in range(i, len(slist)):
if slist[j] < slist[x]:
x = j
slist[i], slist[x] = slist[x], slist[i]
return slist
slist = select_sort([4,5,6,7,3,2,6,9,8])
插入排序(比如碼牌)
- 列表被分爲有序區和無序區兩個部分,最初有序區只有一個元素
- 每次從無序區選擇一個元素,插入到有序區的位置,直到無序區變空
時間複雜度:O(n²)
空間複雜度:O(1)
穩定性:穩定
插入排序代碼
def insert_sort(ilist):
for i in range(len(ilist)):
for j in range(i):
if ilist[i] < ilist[j]:
ilist.insert(j, ilist.pop(i))
break
return ilist
print(insert_sort(ilist=[5,2,9,6,8,4]))