冒泡排序屬於交換排序
兩兩比較大小、交換位置
分為升序和降序排列
n個數從左至右,編號從0開始到n-1,索引0和1的值比較,如果索引0大,則交換兩者,如果索引1大,則不交換。繼續比較索引1和2的值,將大值放在右側,直至n-2和n-1比較完,第一輪比較完成。第二輪從索引0比較n-2,因為最右側位置上已經是最大值。依次類推,每一輪都會減少最右側的不參與比較,直至剩下最後2個數比較
和升序相反
nums = [1, 2, 9, 6, 3, 8, 5, 7, 4] #定義一個數組
length = len(nums) #數組長度
for i in range(length):
flag = True #假定達到目標順序
for j in range(length-1-i):
if nums[j] > nums[j+1]:
temp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = temp
swap_count += 1
flag = False #說明交換過,本躺兩兩比較中出現了順序不對的情況
if flag:
break
print(nums)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
33
14
冒泡法需要數據一輪輪比較
可以設定一個標記判斷此輪是否有數據交換發生,如果沒有發生交換,可以結束排序,如果發生交換,繼續下一輪排序
最差的排序情況是,初始順序與目標順序完全相反,遍歷次數1,…,n-1之和n(n-1)/2
最好的排序情況是,初始順序與目標順序完全相同,遍歷次數n-1
時間復雜度O(n^2)
The solution is very simple:
Catalog Preface Topic switch