網上流傳的所謂冒泡排序加強版,真的加強了嗎?

最近看到很多博客都有寫到冒泡的改良版,大概的思路都是一樣的,然而我本人持懷疑態度,決定親自實驗測試一下,當然,如果強加班能讓冒泡大哥不再那麼累的對比,那對計算機也是一件極好的事情。

看了一下大概的改良思路,大致都是從以下兩點着手:

一、設置標誌位FLAG,如果檢測到一次冒泡後沒有數據交換,那麼必然有序,直接返回數據

這個東東思路還是很好的,在給定的數據已經有序的情況下,效率提升了NNN倍都不止,這樣冒泡大哥就不用傻傻的再一一對比了。

二、設置對比的border位,用j的值更新,在border後的數據必然有序,就可以不做運算了

這個改良的思路我個人認爲比較雞肋,爲什麼呢?因爲如果數據量稍微大一些,且在隨機的情況下,指望後面的給定數據直接是有序的,這個概率極低,而且哪怕後面的99%的數據都有序了,只要有一個數據不滿足條件,那麼還是無法觸發這個東西,反倒是每次都要更新界限值,做了大量賦值運算。

 

下面具體來看看代碼測試:

在我自己做好的類中添加冒泡加強版,這樣我們直接就可以用裝飾器打印出運算時間。

 

先生成1000個隨機數,範圍是0到1000

 

七位選手的比賽成績已經出來了。。。

果不其然,最慘的冒泡選手還是墊底,而它的改良版甚至還不如原版冒泡的速度快

 

這次生成範圍改爲2000,加強版依然沒有發揮它的威力!

可見,對於大量的不重複數據來說,加強版的兩條判斷很難有用武之地

 

那麼再設置一下,如果在重複數據較多的情況下呢?

這次我們發現,就算是隻有0-10的隨機數,加強版的速度仍然慢於普通版冒泡

這種情況下,選擇和插入反倒是能更快一點

 

就算我們把數據設置成只有0和1的列表,結果依然不變

 

最後所幸讓數據全部爲1,加強版終於有所起色了,遠勝於普通版,甚至是七種排序裏最快的!

不過這樣的數據還有什麼意義呢.....

 

最後,我們生成1000個有序的數據,冒泡加強版和選擇遙遙領先,直接跑出了結果!(注意看for循環)

 

可是,正當我們高興,加強版總算有起色時~

只要我們再給這組數據中間,插入一條無序數據。。。

 

結果。。。。。。

 

總結:冒泡排序的加強版,能加強的地方太少了,我覺得不能稱之爲加強版,在絕大多數無序數據的情況下,它的效率都不如普通版冒泡快,只有極個別的已經有序的情況,纔能有所提升,但意義並不大。

果然,程序的世界裏和現實也是一樣的,能原裝就不要魔改,魔改後的東西還不如原裝的呢。。。

 

更多內容請訪問: bookist123.picp.net

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章