1. 程式人生 > >python- 冒泡演算法

python- 冒泡演算法

#### 冒泡演算法 ####
# a 和 b 的值互換
a = 111
b = 222
test = a # test = 111
a = b # a = 222
b = test # b = 111

li = [44, 12, 22, 33, 456, 1, 10]
# print(len(li)) # 7
# for j in range(len(li)):
# print(j)
# 0 1 2 3 4 5 6 7 # range預設是從0 開始的。
for i in range(len(li) - 1): # 此處的-1 是因為,len(li) = 7 ,而做比較的時候i = 7 是最大的,沒有i + 1
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [12, 22, 33, 44, 1, 10, 456] 預設將最大的一個數排序到了最後。
# ### 排序列表中第二個最大的值 ###
for i in range(len(li) - 2): # 此處的-2 是因為,最後一個數已經是最大的了,要排除掉,排除掉以後就是第二大的了。
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [12, 22, 33, 1, 10, 44, 456]
# ### 排序列表中第三個最大的值 ###
for i in range(len(li) - 3): # 此處的-3 是因為,最後1和2的數已經是最大的了,要排除掉,排除掉以後就是第三大的了。
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [12, 22, 33, 1, 10, 44, 456]

# 通過以上的測試,我們發現一個道理,只有最後-1 ,-2, -3 在變,其他都沒有變換,可以用一個變數來替換。
# for i in range(len(li) - 1):
# for i in range(len(li) - 2):
# for i in range(len(li) - 3):
for jj in range(1, len(li)): # 此處的1,是從1 開始,而不是從0 開始,因為-0 還是那個,沒有意義。
for i in range(len(li) - jj):
if li[i] > li[i + 1]:
temp = li[i]
li[i] = li[i + 1]
li[i + 1] = temp
print(li)
# [1, 10, 12, 22, 33, 44, 456]