資料結構之python實現冒泡演算法(bubblesort)
阿新 • • 發佈:2018-12-21
1.氣泡排序思想
- 比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
2.程式碼實現
2.1 實現最優版
"""氣泡排序"""""
def bubble_sort(li):
"""最優版"""""
n = len(li)
# 內部迴圈,一趟結束,會把最大的移動到最後面,共n-1趟
for j in range (n-1):
# 內部迴圈執行一趟後,如果資料沒有交換過,則證明有序
flag = 0
# 需要遊標從0移動n-1
for i in range(n-1-j):
# 每一次讓遊標位置與下一個資料比較,如果前面資料大於後面則進行交換
if li[i] > li[i+1]:
li[i],li[i+1] = li[i+1],li[i]
flag += 1
if flag == 0:
return
if __name__ == '__main__':
li = [3,1,4,5,2]
bs = bubble_sort(li)
print(li)
2.2 精簡版
def bubble_sort(li):
"""精簡版"""
n = len(li)
for i in range(n-1):
for j in range(n-1-i):
if li[j] > li[j+1]:
li[j],li[j+1] = li[j+1] ,li[j]
if __name__ == '__main__':
li = [3,1,4,5,2]
bs = bubble_sort(li)
print(li)
3 時間複雜度和穩定性分析
- 穩定性:穩定的
- 最壞時間複雜度O(n^2)
- 最優時間複雜度O(n)