資料結構&演算法實踐—氣泡排序及改進

wklken發表於2015-12-03

排序>>交換排序>>氣泡排序

List:

  1. start

基本概念:

維基百科http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F

虛擬碼:(來自百科)

簡要排序過程的示例:(基本氣泡排序)

初始陣列

第一輪:

第二輪:

第三輪

第四輪:

第五輪:

cmp count 15

即共進行n-1=5輪冒泡,比較次數為 (n-1) + (n-2) + ……+1 =n*(n-1)/2=15

  1. start

基本氣泡排序python實現:

  1. start

問題:在基本氣泡排序的示例中,第三輪結束時,其實已經排序完成了,但是還是一直會持續後面幾輪的排序,這就帶來了無謂的浪費.

改進:加入標誌,判斷,若是上一輪不存在資料交換,代表上一輪已經是排序的了,退出

比較次數:12

  1. start

區域性氣泡排序:(資料不多,不知道自己理解對不對)

序列[ a b c d ] 冒泡到了b,此時a小於b,比較b c,若是 b 大於 c,交換b c 得到 [ a c b d ]

通常氣泡排序一直往前,繼續比較b和d

其實,在完成一次資料交換時(bc),可以反向增加一次比較,(a 和 c) ,若是a>c,再次交換得到[ c a b d] ——反向做一次冒泡

(百度百科有幾行….湊合看)

定義:可以在一趟全域性掃描中,對每一反序資料對進行區域性氣泡排序處理,稱之為區域性氣泡排序
區域性氣泡排序與氣泡排序演算法具有相同的時間複雜度,並且在正序和逆序的情況下,所需的關鍵字的比較次數和移動次數完全相同。
由於區域性氣泡排序和氣泡排序的資料移動次數總是相同的,而區域性氣泡排序所需關鍵字的比較次數常少於氣泡排序,這意味著區域性氣泡排序很可能在平均比較次數上對氣泡排序有所改進
當比較次數較少的優點不足以抵消其程式複雜度所帶來的額外開銷,而當資料量較大時,區域性氣泡排序的時間效能則明顯優於氣泡排序
(檢視百度百科,有張對比圖)

簡而言之,正向冒泡時,若存在資料交換,反向再進行一次冒泡比較。減少了比較次數

why?

假設在第二輪冒泡 到了50 30

共 8次

共 6次

區域性氣泡排序一個示例過程:

  1. start

僅是貼出來,權當複習,木有答案,後續補充

A.氣泡排序概念,過程描述?

B.最差,平均,最優 時間複雜度?

C.空間複雜度?

D.是否是穩定排序?

E.如何改進?

F.區域性氣泡排序原理?

G.適用場景,什麼情況下最優,什麼情況下最差?

—————————————– END ————————————————-

P.S.

這是第一篇,有什麼不對請指正哈,歡迎補充任何問題和答案

白天上班加班(SDET),夜深敲程式碼(python,java…….),會堅持寫完的

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

資料結構&演算法實踐—氣泡排序及改進 資料結構&演算法實踐—氣泡排序及改進

相關文章