這個是參考大部分博主的,我想自己記下來
1.氣泡排序
顧名思義就是像吐泡泡一樣,把最大/最小的放著最左端或者最右端。
我們可以看到,一共比較了21次。而且出現了乙個問題從第二次迴圈開始到結束,排序的順便其實是都沒有變化的。也就是說我們做了很多無用功。
那麼我們就可以提出改進來優化氣泡排序。
2.初步優化
如果我們能判斷出該序列已經排好序了,就馬上停止排序,這樣就可以剩下一些步驟了。該怎麼辦呢?做標記
看,我們是不是少了很多次數,現在只需要比較15次了,而且大迴圈只進行了3次。
但是,我們再仔細看看上面的迴圈結果,發現後面3個數原本就是有序的,再怎麼比較,他們的位置已經是相對固定的了。那麼如何進行進一步優化呢?
如果我們知道有序區間的邊界位置就好了。對!那麼我們就設定乙個邊界值。但是要怎麼設定?我們可以記錄每次交換的最後乙個交換位置,就是有序與無序之間的邊界了。
void bsort(vector&n)}for(auto x : n)
cout
<< x << "";
cout
<
lastb = bianjie; //
每次最後交換的位置就是邊界值
是的,我們的比較次數變成了9.真是太棒鳥~從21次慢慢減為9次。
氣泡排序 改進
氣泡排序是最簡單的排序演算法之一,在這裡首先要說明的是乙個要注意的地方。氣泡排序在最好情況下時間複雜度可以是o n 2 也可以是o n 下面看一種大家看得最多的寫法 public void bubblesort int arr 上面這樣寫最好情況下也是o n 2 那麼再來看下面這種寫法 public...
基本氣泡排序與演算法改進
氣泡排序基本思想,相鄰兩數一次比較,按照要求順序交換。array,待排陣列 n,陣列大小 int main int i printf 待排序陣列 n for i 0 i 8 i printf d array i bubblesort array,8 printf n氣泡排序後的陣列為 n for i...
詳解氣泡排序 經典與改進
兩兩比較相鄰的關鍵字,如果反序則交換,直到沒有反序的記錄為止。在這一過程中,較小的元素如同氣泡般慢慢浮到上面 正宗的冒泡演算法 public static comparable super anytype void bubblesort anytype a public static void sw...