1. 程式人生 > >算法(一)冒泡排序與封裝接構

算法(一)冒泡排序與封裝接構

冒泡排序

冒泡排序


冒泡排序是相近的兩個數字兩兩比較,然後按照從小到大或者從大到小的順序排列



比如有兩個數字A,B, A = 3 , B = 2,A 比 B 大,則A 和 B 位置發生交換,順序變成了 B,A,詳細過程看輸出結果就很清晰了。




升序排序的代碼如下:

lst1 = [[1, 9, 8, 5, 6, 7, 4, 3, 2],
        [1, 2, 3, 4, 5, 6, 7, 8, 9]]
lst = lst1[0]
lenth = len(lst)
#升序
count_swap = 0
for i in range(lenth):
    flag = False   #標記
    for j in range(lenth - 1):
        if lst[j] > lst[j + 1]:
            lst[j], lst[j + 1] = lst[j + 1], lst[j]
            flag = True  #如果發生交換,標記設為True
            count_swap += 1
            print(lst)
    if not flag:   #not flag表示flag=False,即沒有發生交換,表示全部列表已經排序完成,終止循環
        break
print(lst)  #輸出排序結果
print(count_swap)


輸出結果:

[1, 8, 9, 5, 6, 7, 4, 3, 2]
[1, 8, 5, 9, 6, 7, 4, 3, 2]
[1, 8, 5, 6, 9, 7, 4, 3, 2]
[1, 8, 5, 6, 7, 9, 4, 3, 2]
[1, 8, 5, 6, 7, 4, 9, 3, 2]
[1, 8, 5, 6, 7, 4, 3, 9, 2]
[1, 8, 5, 6, 7, 4, 3, 2, 9]
[1, 5, 8, 6, 7, 4, 3, 2, 9]
[1, 5, 6, 8, 7, 4, 3, 2, 9]
[1, 5, 6, 7, 8, 4, 3, 2, 9]
[1, 5, 6, 7, 4, 8, 3, 2, 9]
[1, 5, 6, 7, 4, 3, 8, 2, 9]
[1, 5, 6, 7, 4, 3, 2, 8, 9]
[1, 5, 6, 4, 7, 3, 2, 8, 9]
[1, 5, 6, 4, 3, 7, 2, 8, 9]
[1, 5, 6, 4, 3, 2, 7, 8, 9]
[1, 5, 4, 6, 3, 2, 7, 8, 9]
[1, 5, 4, 3, 6, 2, 7, 8, 9]
[1, 5, 4, 3, 2, 6, 7, 8, 9]
[1, 4, 5, 3, 2, 6, 7, 8, 9]
[1, 4, 3, 5, 2, 6, 7, 8, 9]
[1, 4, 3, 2, 5, 6, 7, 8, 9]
[1, 3, 4, 2, 5, 6, 7, 8, 9]
[1, 3, 2, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
25




降序排序的代碼如下:

lst1 = [[1, 9, 8, 5, 6, 7, 4, 3, 2],
        [1, 2, 3, 4, 5, 6, 7, 8, 9]]
lst = lst1[0]
lenth = len(lst)
#降序
count_swap = 0  #交換次數
for i in range(lenth):
    flag = False   #標記
    for j in range(lenth - 1, 0, -1):
        if lst[j] > lst[j - 1]:
            lst[j], lst[j - 1] = lst[j - 1], lst[j]
            flag = True  #如果發生交換,標記設為True
            count_swap += 1  #發生交換,次數+1
            print(lst)
    if not flag:   #not flag表示flag=False,即沒有發生交換,表示全部列表已經排序完成,終止循環
        break
print(lst)  #輸出排序結果
print(count_swap)


#輸出結果:

[1, 9, 8, 5, 7, 6, 4, 3, 2]
[1, 9, 8, 7, 5, 6, 4, 3, 2]
[9, 1, 8, 7, 5, 6, 4, 3, 2]
[9, 1, 8, 7, 6, 5, 4, 3, 2]
[9, 8, 1, 7, 6, 5, 4, 3, 2]
[9, 8, 7, 1, 6, 5, 4, 3, 2]
[9, 8, 7, 6, 1, 5, 4, 3, 2]
[9, 8, 7, 6, 5, 1, 4, 3, 2]
[9, 8, 7, 6, 5, 4, 1, 3, 2]
[9, 8, 7, 6, 5, 4, 3, 1, 2]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
11


冒泡排序

選擇排序

二元選擇排序

插入排序

二叉樹

















算法(一)冒泡排序與封裝接構