Python之氣泡排序

2021-09-18 01:15:28 字數 1515 閱讀 8667

氣泡排序(bubble sort):

是一種簡單的、非常低效的排序演算法。氣泡排序依次地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤(如從大到小、首字母從a到z)就把他們交換位置,直到沒有相鄰元素需要交換,即該數列已經排序完成。這個演算法名字的由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。

短路氣泡排序:

在某次遍歷過程中沒有發生交換,說明整個排序已完成,無需繼續遍歷,遍歷提前結束,這就是短路氣泡排序。

氣泡排序在平均和最壞情況下的時間複雜度都是 o(n²),最好情況下都是 o(n),空間複雜度是 o(1)。

示例:

# 普通氣泡排序

def bubblesort(alist):

n = len(alist) - 1 #此處減1可減少下方遍歷時重複計算

for passnum in range(n, 0, -1): #共需遍歷n次,因1個元素是不需要再遍歷的

for i in range(passnum): #1次迴圈遍歷

if alist[i] > alist[i+1]: #公升序排列

alist[i], alist[i+1] = alist[i+1], alist[i] #python特有的交換方式

# 短路氣泡排序

def shortbubblesort(alist):

n = len(alist) - 1

exchanges = false #初始化為未交換過

for passnum in range(n, 0, -1):

for i in range(passnum):

if alist[i] > alist[i+1]:

alist[i], alist[i+1] = alist[i+1], alist[i]

exchanges = true #有交換

if exchanges == false: #若本次遍歷無交換,則

break #說明已按公升序排序,無需繼續遍歷,跳出

alist = [53, 26, 93, 17, 77, 31, 44, 55, 20]

bubblesort(alist)

print(alist)

blist = [53, 26, 93, 17, 77, 31, 44, 55, 20]

shortbubblesort(blist)

print(blist)

結果:

[17, 20, 26, 31, 44, 53, 55, 77, 93]

[17, 20, 26, 31, 44, 53, 55, 77, 93]

Python之氣泡排序

氣泡排序 演算法簡介 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。6.2時間複雜度與空...

Python之氣泡排序

1 先看氣泡排序的原理 一 氣泡排序簡介 氣泡排序 bubble sort 是一種常見的排序演算法,相對來說比較簡單。氣泡排序重複地走訪需要排序的元素列表,依次比較兩個相鄰的元素,如果順序 如從大到小或從小到大 錯誤就交換它們的位置。重複地進行直到沒有相鄰的元素需要交換,則元素列表排序完成。在氣泡排...

Python之氣泡排序

給出乙個純數字列表.請對列表進行排序。列表為lst 7,9,6,3,8,4,2,5,1,0,435,345,123,567,457,456,678,此時用到乙個知識點 a,b b,a lst 7,9,6,3,8,4,2,5,1,0,435,345,123,567,457,456,678,lst2 f...