python算法實踐——冒泡排序

                         QQ:3020889729                                                                                 小蔡

特別聲明

本文采用jupyter notebook演示,請注意移植代碼的整合問題。

排序優點

序號 優點
1 循環次數多,時間複雜度大
2 是一個完整的有序排序
3 是雙循環嵌套的排序,且循環次數與排序個數n有關

補充循環次數的關係:

  1. 第一層循環:
    以n-1次爲有效循環次數

  2. 第二層循環:
    以n-1-i次爲有效循環次數——因爲每迭代1輪,意味着完成一個元素的排序;
    於是,下一次冒泡排序只需要到排好序的那個元素的前一個元素即可。

算法思想

將需要排序的數據,兩兩進行比較,滿足條件就交換,然後依次往後。每一輪從頭到‘尾’的排序就會有一個數位置被唯一確定(比如從大到小排序,則總會選出一個當前最小的數並確定位置)。
在這裏插入圖片描述

代碼實現

temp = 0  # 交換的中間變量

# 任意個數的排序
a = input("請輸入待排序的數: ").split(' ')  # 每個數字以空格隔開
for i in range(len(a)):
    a[i] = int(a[i])
n = len(a)  # 排序個數==數組長度

# 指定個數排序
# a = []  # 排序數據存儲在list中
# n = int(input("預設待排序個數:"))
# for i in range(n):
#     a.append(int(input()))
# print(a)

k1 = 0
k2 = 0
for i in range(n-1):  # 冒泡排序
    k1 += 1
    print("\n\n第{0}輪".format(k1))
    k2 = 0
    for j in range(n-1-i):
        if a[j] <= a[j+1]:  # 從大到小
      # if a[j] >= a[j+1]:  # 從小到大
            k2 += 1
            print("\n第{0}次替換".format(k2))
            print("j={0} : {1}, j+1={2} : {3}".format(j, a[j], j+1, a[j+1]))
            temp = a[j]
            a[j] = a[j+1]  # 滿足條件交換數據
            a[j+1] = temp
            print("j={0} : {1}, j+1={2} : {3}".format(j, a[j], j+1, a[j+1]))

結果展示:(具體展開可以自行運行查看)
在這裏插入圖片描述

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