先上最終**:
'''
版本: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.關鍵字以及...