氣泡排序與改進

2022-07-11 06:30:14 字數 1480 閱讀 7115

這個是參考大部分博主的,我想自己記下來

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...