python實現氣泡排序

2021-09-26 02:06:42 字數 2612 閱讀 3516

氣泡排序的思路為拿第乙個數與後面的數一一對比,如果前乙個數比後乙個數大那麼將位置互換,這一經過一次可以使得最大的元素置於最後

如圖排序數為:54 26 93 17 77 31 44 55 20

如圖所示,經過一次排序以後93跑到了最後乙個位置,經過八次這樣的迴圈便可得到排序後的數字

def bublesort(alist):

n=len(alsit)

#第一次比較

for i in range(n-1):#這裡的迴圈只能是0——n-2,

#我們知道n-1是最後乙個數字,如果是n的話,那麼alist[i+1]就是alist[n]是乙個未知數了。

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

#如果前乙個元素比後乙個元素大,互換元素

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

但是我們是需要全部進行排序的,所以**不可能這樣子寫,是需要兩個for迴圈語句來實現的。

我們就以排序數為:54 26 93 17 77 31 44 55 20 為例子。

首先我們可以看出需要對其進行8次一次排序操作。

(1)26 54 17 77 31 44 55 20 93

(2)26 17 54 31 44 50 20 77 93

(3)17 26 31 44 50 20 54 73 93

(4)17 26 31 44 20 50 54 73 93

(5)17 26 31 20 44 50 54 73 93

(6)17 26 20 31 44 50 54 73 93

(7)17 20 26 31 44 50 54 73 93

(8)17 20 26 31 44 50 54 73 93

那麼我們設定第乙個迴圈的話j就是從range(0,n-1)中去迴圈,那麼第二個迴圈i是與第乙個迴圈有關係的。

例如當 j=0, i就要從0——n-2

當j=1, i就要從0——n-3

當j=2, i就要從0——n-4

以此類推 就可以得到i是從range(0,n-1-j)中去迴圈。這裡可以通過畫圖方式去理解。再每次j迴圈一次後,需要排序的數字就會少乙個,(因為在每次的j迴圈最後乙個元素都是最大的,無需在對後面的數字對比。)

def bublesort(alist):

"""氣泡排序""""

n=len(alist)#記錄表長

for j in range(n-1):

#執行的次數

for i in range(0,n-1-j):

#每一次迴圈乙個乙個比較前後元素的大小

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

alist[i],alist[i+1]=alist[i+1],alist[i]#元素互換

if __name__=="__main__":

a=[54,26,93,17,77,31,44,55,20]

print("排序之前的數為:")

print(a)

print("排序之後的數為:")

bublesort(a)

print(a)

for j in range(n-1):

for i in range(0,n-1-j):

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

這裡面有兩個迴圈,第乙個迴圈執行次數為n-1,第二個迴圈是從 n-1,n-2,n-3 .。。。。。這一迴圈,所以兩個迴圈的可以都看出n,所以最壞的複雜度為o(n*n),最優複雜度為o(n)。

對於本來就排序好的列表來說,我們沒必要進行上面的**,這樣比較的話時間複雜度為o(n*n)。

如[1,2,3,4,5,6] 如果按照上面的**,我們需要執行兩個for迴圈才可以。其實呢!沒必須,因為這個本來就是排序好的列表了,那麼我們優化**如下

def bublesort(alist):

"""氣泡排序""""

n=len(alist)#記錄表長

for j in range(n-1):

#執行的次數

count=0 #初始化計數變數

for i in range(0,n-1-j):

#每一次迴圈乙個乙個比較前後元素的大小

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

alist[i],alist[i+1]=alist[i+1],alist[i]#元素互換

count+=1# 如果進行了交換就對count進行+1操作

if 0==count:#如果count等於0就說明沒有進行上面if條件裡面的內容,也就是說沒有交換

return

if __name__=="__main__":

a=[54,26,93,17,77,31,44,55,20]

print("排序之前的數為:")

print(a)

print("排序之後的數為:")

bublesort(a)

print(a)

氣泡排序(python實現)

coding utf 8 created on tue jul 4 11 37 19 2017 data list cnt num all 0 def data in func data list,cnt num all while true judge continue input 請選擇是輸入資...

氣泡排序(Python實現)

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為...

Python實現氣泡排序

氣泡排序 bubble sort 是最容易理解的排序演算法之一,但是執行效率有點低。冒泡過程 對待排序部分 假設有m個元素 從頭開始進行兩兩比較,如果第乙個比第二個大 公升序 就交換他們兩個。這樣本輪排序結束後就可以保證值最大的元素在最右邊,那麼下次只需要對前面 m 1 個數進行冒泡。完整的氣泡排序...