排序演算法之 氣泡排序(和優化)

2022-03-28 17:37:28 字數 2172 閱讀 5748

氣泡排序其實就是做沉底運動,兩兩比較,誰大誰沉底。

舉例說明:要排序陣列:int arr=;   

第一趟排序:

第一次排序:6和3比較,6大於3,交換位置:  3  6  8  2  9  1

第二次排序:6和8比較,6小於8,不交換位置:3  6  8  2  9  1

第三次排序:8和2比較,8大於2,交換位置:  3  6  2  8  9  1

第四次排序:8和9比較,8小於9,不交換位置:3  6  2  8  9  1

第五次排序:9和1比較:9大於1,交換位置:  3  6  2  8  1  9

第一趟總共進行了5次比較, 排序結果:      3  6  2  8  1  9

第二趟排序:

第一次排序:3和6比較,3小於6,不交換位置:3  6  2  8  1  9

第二次排序:6和2比較,6大於2,交換位置:  3  2  6  8  1  9

第三次排序:6和8比較,6大於8,不交換位置:3  2  6  8  1  9

第四次排序:8和1比較,8大於1,交換位置:  3  2  6  1  8  9

第二趟總共進行了4次比較, 排序結果:      3  2  6  1  8  9

第三趟排序:

第一次排序:3和2比較,3大於2,交換位置:  2  3  6  1  8  9

第二次排序:3和6比較,3小於6,不交換位置:2  3  6  1  8  9

第三次排序:6和1比較,6大於1,交換位置:  2  3  1  6  8  9

第二趟總共進行了3次比較, 排序結果:         2  3  1  6  8  9

第四趟排序:

第一次排序:2和3比較,2小於3,不交換位置:2  3  1  6  8  9

第二次排序:3和1比較,3大於1,交換位置:  2  1  3  6  8  9

第二趟總共進行了2次比較, 排序結果:        2  1  3  6  8  9

第五趟排序:

第一次排序:2和1比較,2大於1,交換位置:  1  2  3  6  8  9

第二趟總共進行了1次比較, 排序結果:  1  2  3  6  8  9

最終結果:1  2  3  6  8  9

由此可見:n個數字要排序完成,總共進行n-1趟排序,每i趟的排序次數為(n-i)次,所以可以用雙重迴圈語句,外層控制迴圈多少趟,內層控制每一趟的迴圈次數,即

for(int i=0;i)

}

氣泡排序法 口訣:

外層迴圈 0到n-1 //控制比較輪數 n 表示元素的個數

內層迴圈 0到n-i-1 //控制每一輪比較次數

兩兩比較做交換

**實現:

每次最大的數沉底

但是最後幾個資料重複做比較了,優化一下演算法,加個識別符號,每交換一下記錄一下

最基礎的氣泡排序。

參考

排序演算法之 氣泡排序優化

氣泡排序優化演算法思想 我們通過在程式定義了乙個bool型別的flag變數,用來判斷往後的迴圈當中,陣列是否已經是有序的,每一輪迴圈都會設定其值為true,當有元素對調位置時,就將flag的值設定為true,表示該陣列還不是有序陣列。每一輪都要判斷flag的值,如果判斷當前一輪操作沒有元素有位置調換...

氣泡排序 氣泡排序演算法優化

常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...

排序演算法入門之氣泡排序優化

先來說說,氣泡排序哪些地方需要優化 那麼如何優化?通過觀察可以看到,造成沒必要的操作主要原因是後面8個數的順序都已經是有序。所以,我們可以通過設定乙個標記變數,標記數列中的數是否在迴圈結束前就已經排好序 include void swap int a,int b int main int i,j i...