################## 排序演算法 ######################
"""排序演算法,
我們想要把線性表中的無序序列,排成有序序列,的演算法,就是排序演算法,
排序演算法的穩定性
舉例:假設對下面的元組要以他們的第乙個數字來排序。
(4, 1) (3, 1) (3, 7)(5, 6)
如果你排序之後,(3, 1) (3, 7)和原來的順序一樣,就是穩定的,否則就是不穩定的,
(3, 1) (3, 7) (4, 1) (5, 6) (維持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)
我們說排序就是預設從小到大的,
"""
################## 氣泡排序 ######################
"""氣泡排序思路
判斷本數字和下乙個數字的關係,
第一種情況,如果本數字大,把游標和本數字都往後移動,
第二種情況,如果本數字小,本數字不動,游標往後移動,
這樣從前到後一輪走下來,最大的數字就移動到最後面了,
然後再執行一輪,一直執行,直到都排好了,
所以設計思路一定是兩個迴圈,
1,內層迴圈負責從第乙個數字開始往後和每乙個數字比較,如果遇到比本數字小的就交換位置,繼續本數字和下面的數字比較,如果比本數字大,就本數字不動,游標往下,
2,外層迴圈負責內層迴圈的次數,因為每次內層迴圈都會把最大的放到最後,所以越往後迴圈的次數就是依次減一
"""
################## 氣泡排序 ######################
#第一版def
bubble_sort(alist):
n=len(alist)
for j in range(0,n-1):
"""這是走一輪,只需要走到倒數第二個數字就可以了,所以結尾是n-1,結尾不包含,
j=0 內迴圈停止是走到n-2 range(0,n-1)
j=1 內迴圈停止是走到n-3 range(0,n-2)
j=2 內迴圈停止是走到n-4 range(0,n-3)
j=n range(n-1-j)
"""for i in range(n-1-j):
if alist[i] >alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
#難點就是range這個地方,先寫內層迴圈,就是走一輪,外層迴圈控制走幾輪,
################## 氣泡排序 ######################
#第二版def
bubble_sort2(alist):
for j in range(len(alist)-1,0,-1):
"""range(len(alist)-1,0,-1)
這個產生的序列是: n-1 n-2 n-3 .... 1
外層還是在控制記憶體迴圈的次數,
"""#
j表示每次遍歷需要比較的次數,是逐漸減小的
for i in range(j): #
這個迴圈還是在控制每次迴圈他所走的步數,
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
#這兩種方式,他們的最壞時間複雜度都是n的平方,
################## 氣泡排序 ######################
#第三版:
#對於乙個有序的序列,[1,2,3,4,5,6]
#是否可以簡化這個過程,怎麼優化這個程式,
#如果從頭走到尾,不需要我交換,就說明一遍就足夠了,說明就是有序的了,
#怎麼實現,
defbubble_sort3(alist):
n=len(alist)
for j in range(0,n-1):
count =0
for i in range(n-1-j):
if alist[i] >alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
count += 1
if 0 ==count:
break
#這種最優的時間複雜度就是n,最壞的時間複雜度還是n的平方,
if__name__ == "
__main__":
li = [54,26,93,17,77,31,44,55,20]
(li)
bubble_sort(li)
print(li)
################## 氣泡排序 ######################
################## 氣泡排序 ######################
################## 氣泡排序 ######################
資料結構 排序 氣泡排序演算法
氣泡排序 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序對n個專...
資料結構和演算法 氣泡排序
它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同...
資料結構 氣泡排序演算法
1 氣泡排序 氣泡排序之所以叫氣泡排序,是因為它每一種元素都像小氣泡一樣根據自身大小一點一點往陣列的一側移動。基本思想是假如需要排序的陣列元素有n個,則進行n 1輪比較,第k輪比較中元素的比較次數為n k次,演算法的複雜度準確界為o n2 演算法步驟如下 比較相鄰的元素。如果第乙個比第二個大,就交換...