說到排序,耳熟能詳,手寫**都可以很順溜的氣泡排序。但是追究氣泡排序的優化的時候,那麼估計就有很多人懵逼了。下面介紹幾種冒泡的幾個優化點吧。
有這麼乙個數列:
int number1 = ;
常規的寫法:
這種冒泡寫法,一直要到每一輪的每一次對比完成後,迴圈才會結束,顯然這樣的寫法效率比較低,而且某些時候數列有一部分是有序的,也要去輪訓對比,這個就沒必要了,針對這兩點下面進行優化:
優化1:
定義乙個標記,某一輪比較只要沒有交換的元素了那麼後面的對比就沒必要了直接break
這樣定乙個boolea型別的標記,每一輪只要有資料進行交換就說明後面還有對比的需要,標記為false。某一輪,沒有發生資料交換了,說明後面的數列是有序數列了,就沒有比較的需要了,直接中斷迴圈,這樣可以減少不必要的迴圈,從而提高排序的效率。在優化1的基礎上,其實還可以優化。
優化2:
數列經過排列分為有序和無序部分,那麼有序部分就不需要比較,每一輪排序最後一次元素交換的位置就是無序數列的邊界,後面就是有序的了
記錄下每一輪的最後一次資料交換的位置,那麼下一輪進行比較的時候,該位置後面的元素就沒必要去比較了,因為每一輪都會吧最大的數放在最後,那麼最後一次交換後,後面的數都比前面的大,且有序。
根據列印的count變數也可以明顯看出迴圈的次數優化後是明顯減少的。其實對於優化還有一種,就是所謂的雞尾酒排序(不知道怎麼區這個名字)。
對於雞尾酒排序,更多的是針對於大部分元素已經有序的情況下,效率會更高。不然其他情況優化2方案效率是比較不錯的。
其實是基於優化2,對於每**迴圈中有兩個小迴圈,定義左右邊界,其中乙個小迴圈從左邊界開始到右邊界開始對比,另外乙個迴圈從右邊界往左邊界開始對比。這種排序如果大部分數列是有序的,效率還是比較高的,但是無序的比較多,優化2方案效率還是會高一點。
你所不知道的 const
const 常量是不可修改的,也就是說only read,例如 const int nbuffsize 512 nbuffsize 0 error就是因為const 常量不能修改,所以定義時必須初始化預設在全域性作用域中定義的非const變數可以在整個程式中訪問,例如 int ncounter ex...
你所不知道的background
今天要說說css中background這個屬性裡面的大學問。在乙個宣告中設定所有的背景屬性 body 看到這串 你怕了嗎?知道他們都代表啥意思嘛?不要捉急,來看展開式。展開式 background color設定元素的背景顏色,不能設定到外邊距,可以繼承父級的背景顏色,預設為透明。backgroun...
overflow hidden 你所不知道的事
overflow hidden 你所不知道的事 overflow hidden這個css樣式是大家常用到的css樣式,但是大多數人對這個樣式的理解僅僅侷限於隱藏溢位,而對於清除浮動這個含義不是很了解。這是乙個常用的div寫法,下面我們來書寫樣式。大家可以在dmx中自己做試驗 wai nei 可以看到...