1、先看氣泡排序的原理
一、氣泡排序簡介
氣泡排序(bubble sort)是一種常見的排序演算法,相對來說比較簡單。
氣泡排序重複地走訪需要排序的元素列表,依次比較兩個相鄰的元素,如果順序(如從大到小或從小到大)錯誤就交換它們的位置。重複地進行直到沒有相鄰的元素需要交換,則元素列表排序完成。
在氣泡排序中,值最大(或最小)的元素會通過交換慢慢「浮」到元素列表的「頂端」。就像「冒泡」一樣,所以被稱為氣泡排序。
二、氣泡排序原理
氣泡排序的原理如下:
比較相鄰的兩個元素。如果第乙個比第二個大則交換他們的位置(公升序排列,降序則反過來)。
從列表的開始一直到結尾,依次對每一對相鄰元素都進行比較。這樣,值最大的元素就通過交換「冒泡」到了列表的結尾,完成第一輪「冒泡」。
重複上一步,繼續從列表開頭依次對相鄰元素進行比較。已經「冒泡」出來的元素不用比較(一直比較到結尾也可以,已經「冒泡」到後面的元素即使比較也不需要交換,不比較可以減少步驟)。
繼續從列表開始進行比較,每輪比較會有乙個元素「冒泡」成功。每輪需要比較的元素個數會遞減,一直到只剩乙個元素沒有「冒泡」時(沒有任何一對元素需要比較),則列表排序完成。
以列表 [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21] 進行公升序排列為例。列表的初始狀態如下圖。
要進行公升序排列,則大的元素要依次「冒泡」到列表的結尾。
從列表的開頭,比較相鄰的兩個元素,如果第乙個值比第二個值大則交換。10小於17,不需要交換。
向列表的結尾方向「走訪」,比較第二組相鄰的元素(第二個和第三個),如果不是從小到大則交換。17小於50,不需要交換。
繼續「走訪」,比較第三組相鄰的元素,如果不是從小到大則交換。50大於7,所以需要交換。
對順序錯誤的元素進行位置交換。交換50和7的位置。
一直「走訪」到結尾,第一輪「冒泡」結束後,值最大的元素「冒泡」到了列表的結尾。50「冒泡」到了列表結尾。
在下一輪「冒泡」中,不需要再將50進行比較,需要比較的元素個數減1。
從列表開頭,重複下一輪「冒泡」,每進行一輪「冒泡」,需要比較的元素都少乙個,直到沒有元素對需要比較時,整個列表排序完成。排序結果如下圖。
**中,i 表示第幾輪「冒泡」,j 表示「走訪」到的元素索引。每一輪「冒泡」中,j 需要從列表開頭「走訪」到 len(array) - i 的位置。
a=[3
,5,6
,2,8
,1]for i in
range(1
,len
(a))
:for j in
range(0
,len
(a)-1)
:if a[j]
>a[j+1]
: a[j]
,a[j+1]
=a[j+1]
,a[j]
print
(a)
輸出:[1, 2, 3, 5, 6, 8] Python之氣泡排序
氣泡排序 bubble sort 是一種簡單的 非常低效的排序演算法。氣泡排序依次地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤 如從大到小 首字母從a到z 就把他們交換位置,直到沒有相鄰元素需要交換,即該數列已經排序完成。這個演算法名字的由來是因為越大的元素會經由交換慢慢 浮 到數列的頂...
Python之氣泡排序
氣泡排序 演算法簡介 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。6.2時間複雜度與空...
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...