笨人學習之python實現冒泡算發

2021-10-23 08:16:37 字數 1504 閱讀 7027

先上最終**:

'''

版本:v2.0

功能: 1.test_maopao 實現python的冒泡演算法

冒泡演算法是臨近的2個元素對比大小,把小的交換到前面,大的放到後面

'''def test_maopao(list):

#第一層for是為了控制迴圈,具體範圍是多少呢?我們來分析下

for i in range(len(list)):

#解釋下這個範圍為何是len(list)-1,如果寫成len(list),那麼你的list[j+1]就會超出它的範圍了

change=true

for j in range(0,len(list)-1):

if (list[j]>list[j+1]):

tmp = list[j]

list[j]=list[j+1]

list[j+1]=tmp

change=false

# 如果一開始的change定義的是true,直接這邊驗證下chagne是true就可以了

if change:

break

print('第',i,'次排序的結果',list)

def main():

'''主函式

:return:

'''# 定義一串list

list=[3,5,21,9,7,4,8,1,98,2,56]

test_maopao(list)

if __name__ =='__main__':

main()

先來闡述我的思路,有不對的地方,希望不吝指教:

首先先定義乙個函式,你也可以寫bubblesort等等,我為了簡單易讀,直接寫的test_maopao。甭管怎麼著,你先寫2個for語句

第乙個for肯定是用來控制外層的迴圈次數,具體範圍如果暫時分析不出來,直接寫len(list),如果錯了也無非多判斷幾次

剩下的就是主要的實現了,這個實現很簡單,就好比是乙個醬油和乙個啤酒想要交換裝,中間來個空瓶子(tmp)

剩下的就是大功告成了

但是如果你執行了幾次,你就會發現,其實可能你的list已經是有序的狀態了,但是它還在一直跑著,那麼這樣就有點浪費資源了。這個時候你有2個選擇:控制第乙個for迴圈,或者第二個for迴圈。我的**是實現的第乙個。看看效果

那麼第二個是如何來實現的呢?我們想下,當你的i從0變成1的時候了,那個時候應該把最大的數放到最後的乙個位置了,那麼下次判斷的時候,就可以少判斷1個了。同理當i從1變成2的時候,以此類推不難想出,我們需要的就是修改j的範圍

上述**中,將j從for j in range(0,len(list)-1-i)即可。當然其實還可以把這2種結合到一起,那就是最完美的了,不妨試試

個人學習筆記 氣泡排序Python版

氣泡排序的原理 氣泡排序是將待排序的陣列相鄰兩元素兩兩比較,如果符合排序的預期則這兩個元素的相對位置保持不變 如果不符合排序的預期則交換這兩個相鄰元素的順序。題眼在相鄰上。以這樣的方式進行排序通過兩兩的交換可以將端元素 擠 到最邊上,就像泡泡浮出水面,因而起名為氣泡排序。以如下所示陣列為例 65 1...

Python學習 實現《氣泡排序法》

演算法思想 step1 將第乙個資料和第二個進行比較,若第乙個資料大於第二的資料,則將第乙個資料 大數 和第二個資料 小數 交換位置。再將第二個資料和第三個比較,若第二個資料大於第三個資料,交換資料。依次類推,直到最大的數排到最後的位置上。第1個迴圈結束。step2 將第乙個資料和第二個進行比較,若...

python個人學習筆記

學習筆記篇 段落注釋 aba 行 注釋 可以重複使用的乙個量,包含數字,大小寫字母,下劃線等命名方式,不支援數字開頭命名格式。以下劃線開頭命名的一般具有特殊含義,如 age,name 可縮寫命名。首字母大小寫命名分別用於類 類以外的命名。如myfirst,myfirst,my first.關鍵字以及...