冒泡排序&選擇排序&插入排序

目錄

冒泡排序

冒泡排序(最好是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)

選擇排序

  1. 先假定第一個是最小的,依次與其他數比,如果其他數中有比第一個數小就假定這個更小的最小
  2. 再比,第一輪就可以找到最小的那個放到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])

插入排序(比如碼牌)

  1. 列表被分爲有序區和無序區兩個部分,最初有序區只有一個元素
  2. 每次從無序區選擇一個元素,插入到有序區的位置,直到無序區變空

時間複雜度: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]))

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