QQ:3020889729 小蔡
特別聲明
本文采用jupyter notebook演示,請注意移植代碼的整合問題。
排序優點
序號 | 優點 |
---|---|
1 | 循環次數多,時間複雜度大 |
2 | 是一個完整的有序排序 |
3 | 是雙循環嵌套的排序,且循環次數與排序個數n有關 |
補充循環次數的關係:
-
第一層循環:
以n-1次爲有效循環次數 -
第二層循環:
以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]))
結果展示:(具體展開可以自行運行查看)