1. 程式人生 > >利用Python進行冒泡排序

利用Python進行冒泡排序

odin 位置 數組越界 span RR 結果 pri AS 最大

# -*- coding:utf-8 -*-

## 冒泡排序解析
"""
冒泡排序的必備知識:
互換位置 用temp臨時變量
a1 = 456
a2 = 123

temp = a1
a1 = a2
a2 = temp

print(a1)
print(a2)

Python中可以不使用中間變量temp。直接可以進行互換位置。
a1 = 456
a2 = 123

if a1 > a2:  # 如果a1 比 a2 大,那麽 交換位置
    (a1, a2) = (a2, a1) # 運用到多變量賦值,用元組分隔。
print(a1, a2)

# 冒泡排序原理

1       1       1       33
10 10 33 1 》 》 》 2 33 10 10 33 2 2 2 上面是4個數。通過依次的從下面兩個數開始比較,再與上面比較,得出最大的值,將最大的值放在最上面的位置,這就是冒泡。 33和2 先排序。利用的就是上面的那個基礎知識。那麽2在下面,33在上面。然後33和10再進行比較。最大的放上面,最小的放下面。。。。。 最後找到了33是最大值。該值為最大。放到了最上面。通過一系列的比較。33是最大的放在上面了。 然後再次操作步驟和上面一樣,再進行最下面兩個比較,依次比較。將最大的第二個數放到最上面。
33 33 1 10 10 1 2 2 這次將最大的第二位數10找到了。 繼續比較。。。 33 33 10 10 1 2 2 1 這就是最終的結果,這就是應用的冒泡排序原理進行排序。 ------------- li = [33, 2, 10, 1] 使用冒泡排序,將列表從小到大排序; 下面用代碼實現: """ li = [33, 2, 10, 1] # 這是一個列表。長度為len(li) print(li) for i in range(len(li) - 1): # i = 0 1 2 3
# current_value: li[i] 33 2 10 1 # next_value: li[i + 1] 2 10 1 無值了,導致數組越界。因此range(len(li) - 1) # print(i, li[i], li[i+1]) if li[i] > li[i + 1]: temp = li[i] li[i] = li[i + 1] li[i + 1] = temp print(li) # 這次將最大的值33 取出了 放到了最後。 # 33最大的取出來了,li = [2, 10, 1, 33] ;現在還有再進行排序。將前三個值進行分別冒泡排序。那麽就是 for i in range(len(li) - 2) for i in range(len(li) - 2): if li[i] > li[i + 1]: temp = li[i] li[i] = li[i + 1] li[i + 1] = temp print(li) # 這次將第二大的的值33 取出了倒數第二位。 # 10第二大的取出來了, li = [2, 1, 10, 33], ;現在還有再進行排序。將前兩個值進行分別冒泡排序。那麽就是 for i in range(len(li) - 3) for i in range(len(li) - 2): if li[i] > li[i + 1]: temp = li[i] li[i] = li[i + 1] li[i + 1] = temp print(li) # 這裏就結束了,因為只有最後兩個數 1 和 2 進行比較了。 # 總結上面的代碼過程。唯一的區別在於for i in range(len(li) - 【1、2、3】) 這裏的不同。那麽就可以再在外面做個循環。 # li 的長度為len(li);上面len(li)個數排序進行了 -1 -2 -3 三次的過程。那麽外層循環可以用 for j in range(1, len(li)) 即可。

冒泡排序最終表達式

li = [22, 31, 82, 35, 333, 2, 62, 78, 24, 6, 23, 4, 8, 88, 5, 42, 21, 233, 1232, 165, 121, 2480, 82, 12, ]

for j in range(1, len(li)):
    for i in range(len(li) - j):
        if li[i] > li[i + 1]:
            temp = li[i]
            li[i] = li[i + 1]
            li[i + 1] = temp
print(li)

或者

for j in range(1, len(li)):
    for i in range(len(li) - j):
        if li[i] > li[i + 1]:
            (li[i], li[i + 1]) = (li[i + 1], li[i])  # Python可以不使用中間變量temp,直接可以互換位置。
print(li)

利用Python進行冒泡排序