Python 冒泡排序詳細解讀,史上最詳細版,初學者注意 好好讀懂每個字。

標題冒泡排序:原理就是重複的進行 兩兩 元素之間的比較(冒泡的意思就是左右之間的比較元素)

注意錯誤點 IndexError: list index out of range (列表索引超出範圍)
冒泡循環 典型的2層 for 循環 ,for1(最外層) 和 for2(內層循環)。
在冒泡循環中 外層for1 循環的次數代表的 是 列表中 所有數 比較的次數。一般情況爲
range(1,len(list1))或者 range(0,len(list1)-1)

在內層循環中 循環次數代表的是 剩餘元素之間 兩兩比較,外層每比較一次,內層就要減少一次,所以
range(0,len(list1)-i) 或者 range(0,len(list1)-i-1)

range()不論內外層 都要做 減一的排序,因爲兩兩 比較最後一個元素 是不用再去比較的

從下面的例子可以看出 range(1,len(list1))與range(0,len(list1)-i) 是一對 for1 for2循環
range(0,len(list1)-i-1)與 range(0,len(list1)-i-1) 也是一對for1(外層) for2(內層)循環

標題冒泡循環的時間複雜度 是 N2

#例子1
sum1= 0 #比較次數
list1 = [4, 4, 5, 6, 7, 8, 3, 5,9]
for i in range(1, len(list1)):		# 注意這裏的起始下標爲從一開始
    for j in range(0, len(list1) - i):	# 最後一個自己不用和自己比較所以,可以少一次
        sum1 +=1
        if list1[j] > list1[j + 1]:
            list1[j], list1[j + 1] = list1[j + 1], list1[j]
print(list1)
print(sum1)
#例子2
sum = 0
list2 = [45, 4, 6, 5, 9, 7, 8, 3, 45]
for i in range(0, len(list2) - 1):  # 最後一個自己不用和自己比較所以,可以少一次
    for j in range(0, len(list2) - i - 1):	# 每執行一次將本次循環中最大的元素放入對應末尾,所以減去i,少執行對應次數
        sum += 1
        if list2[j] > list2[j + 1]:
            list2[j], list2[j + 1] = list2[j + 1], list2[j]
print(list2)
print(sum)

在這裏插入圖片描述

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