圖解冒泡排序算法


圖解冒泡排序

冒泡排序是常用排序算法中最簡單的一種,可能很多同學看到這個標題之后就會很不屑的說,冒泡排序誰不會吖,你還在這里獻丑!我就獻丑了,怎么了!我驕傲了嗎?還不會的同學好好看了,以后你也可以在別人面前說,連冒泡排序都不會退出程序界啦。基於這個背景衍生了一個排序算法鄙視鏈。

 

排序算法鄙視鏈:寫冒泡的鄙視不會的,會選擇排序的鄙視只會冒泡的,會插入排序的鄙視選擇排序,希爾排序鄙視插入排序,快速排序鄙視希爾排序,歸並排序鄙視快速排序,堆排序鄙視歸並排序,基數排序鄙視堆排序。(純屬娛樂)

 

         我們為了不站在鄙視鏈的最底端,今天就來學習下最簡單的一個排序冒泡排序。

冒泡算法名稱由來

冒泡算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。

冒泡排序基本思想

基本思想:重復遍歷要排序的數列,依次比較兩個相鄰元素的大小,根據條件交換元素,讓小的數下沉,大的數冒起來。(同樣可以反過來大的往下沉,小的往上冒)。

圖解冒泡排序

將列表[1,3,5,4,2]進行排序,把元素想象成一個小球。如下圖所示:

 

 

 

 

第一次循環進行交換最大值5浮到頂部。接下來進行第二次循環: 5在第一次已經冒出來,第二次循環不需要進行交換比較

 

 

 

第三次循環[4,5]已經冒出來,第三次循環不需要進行交換比較

 

 

 

第四次循環:到第4次循環結束之后,全部元素交換完成,得到一個有序的列表。

 

 

 

到底循環多少次?每一次交換多少次?

若初始文件是反序的,需要進行n-1趟排序。每趟排序要進行n-i次的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。

 

Python代碼實現冒泡算法排序:

a = [1, 3, 5, 4, 2]
n = len(a)
for i in range(n - 1):
    for j in range(0, n - i - 1):
        if a[j] > a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]
print(a)

  

最優時間復雜度O(n)冒泡算法時間復雜度

最壞時間復雜度O(n2)

平均時間復雜度O(n2)

冒泡算法穩定性

冒泡排序就是將大的元素往后移動,交換發生在兩個元素之間,且交換時不會影響到其他元素,只會發生交換與不交換,如果兩個元素相等是不會發生交換的。冒泡算法是一種穩定的排序算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM