八大排序演算法之氣泡排序(python)

2021-10-08 07:35:25 字數 1748 閱讀 2513

氣泡排序演算法的原理:

比較相鄰的元素,如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較

這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(公升序或

降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「冒

泡排序」。

以[9,5,4,3,2]為例:

第一輪:

第一次:9>5===>[5,9,4,3,2]

第二次:9>4===>[5,4,9,3,2]

第三次:9>3===>[5,4,3,9,2]

第四次:9>2===>[5,4,3,2,9]

第一輪排序結果:[5,4,3,2,9]

第二輪:

第一次:5>4===>[4,5,3,2,9]

第二次:5>3===>[4,3,5,2,9]

第三次:5>2===>[4,3,2,5,9]

第二輪排序結果:[4,3,2,5,9]

第三輪:

第一次:4>3===>[3,4,2,5,9]

第二次:4>2===>[3,2,4,5,9]

第三輪排序結果:[3,2,4,5,9]

第四輪:

第一次:3>2===>[2,3,4,5,9]

第四輪排序結果:[2,3,4,5,9]

總結:

1.對乙個長度為n的陣列排序,需要排n-1輪;

2.第i輪排序,需要n-1-i次;

演算法:

1.使用for迴圈控制排序的輪數,陣列的長度為n,排序的輪數為n-1;

2.使用內嵌for迴圈控制每輪排序的次數,n-1-k,k為第k輪排序;

3.如果arr[i]>arr[i+1],arr[i+1]與arr[i]位置調換;

4.外層迴圈結束,返回陣列

**實現:

def

bubble

(arr)

: n=

len(arr)

for k in

range

(n-1):

for i in

range

(n-1

-k):

print

("第%d輪第%d次排序前:"

%(k+

1,i+1)

,arr)

if arr[i]

>arr[i+1]

: arr[i]

,arr[i+1]

=arr[i+1]

,arr[i]

print

("第%d輪第%d次排序後:"

%(k+

1,i+1)

,arr)

return arr

時間複雜度:

氣泡排序一共遍歷了n-1 + n-2 + … + 2 + 1 = n * (n-1) / 2 = (n2- n)/2次, 最大的影響

因子是n2 因此氣泡排序總的平均時間複雜度為 o(n2)

八大排序演算法之氣泡排序

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。def bubble sort l...

八大排序演算法 氣泡排序

在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。include include 常規氣泡排序 void bubblesort int r,int n ...

八大排序演算法 氣泡排序

氣泡排序是c語言中演算法的簡單實現 什麼是冒泡 他重複的走訪要排序的序列,一次比較倆個元素,如果順序錯誤就交換,知道沒有必要在交換就完成排序。例子 原序列 5 3 9 6 8 2 7 第一趟 3 5 6 8 2 7 9 第二趟 3 5 6 2 7 8 9 第三趟 3 5 2 6 7 8 9 第四趟 ...