氣泡排序 Bubble Sort

2021-10-01 19:50:28 字數 2006 閱讀 7199

自我學習總結之氣泡排序(bubble sort)

what?

這個演算法的名字由來是因為越小/大的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」

擺原理

1、從第乙個元素開始,比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。此時,最後的元素應該會是最大的數。

3、針對所有的元素重複以上的步驟,除了最後排好的元素。

4、重複以上步驟,知道所有元素有序。

假如現有陣列:int

array =

newint

;

經過氣泡排序:

第0次排序:98

7654

3210

第1次排序:87

6543

2109

第2次排序:76

5432

1089

第3次排序:65

4321

0789

第4次排序:54

3210

6789

第5次排序:43

2105

6789

第6次排序:32

1045

6789

第7次排序:21

0345

6789

第8次排序:10

2345

6789

第9次排序:01

2345

6789

在0和1次排序之間詳細過程為:

第0_0次排序:98

7654

3210

第0_1次排序:89

7654

3210

第0_2次排序:87

9654

3210

第0_3次排序:87

6954

3210

第0_4次排序:87

6594

3210

第0_5次排序:87

6549

3210

第0_6次排序:87

6543

9210

第0_7次排序:87

6543

2910

第0_8次排序:87

6543

2190

第0_9次排序:87

當比較的兩個數相等時,不會發生交換,所以相等的兩個數相對順序沒變,所以氣泡排序是一種穩定排序演算法。

假如初始陣列就是有序的,但是按照上述**我們還是要比較n-1次,針對這個問題我們進行優化。

解決方案:

1、設定標誌位flag,如果發生了交換flag設定為true;如果沒有交換就設定為false。

2、這樣當一輪比較結束後如果flag仍為false,即:這一輪沒有發生交換,說明資料的順序已經排好,沒有必要繼續進行下去。

優化後**:

public

static

void

sort

(int

array)}if

(!flag)

break

;// 判斷標誌位是否為false,如果為false,說明後面的元素已經有序,就直接return

}}

氣泡排序 bubble sort

氣泡排序是最基本的排序演算法,常被做為內部排序的第乙個排序演算法進行講解。它的原理非常簡單,只是一 個兩層迴圈,每次將最大或最小的放到陣列最後。演算法如下 b為陣列的起始位置,e為陣列的結果位置 int bubble int data,int b,int e return n 這個函式返回兩個整數比...

氣泡排序(Bubble Sort)

無論你學習哪種程式語言,在學到迴圈和陣列時,通常都會介紹一種排序演算法來作為例子,而這個演算法一般就是氣泡排序。並不是它的名稱很好聽,而是說這個演算法的思路最簡單,最容易理解。因此,哪怕大家可能都已經學過氣泡排序了,我們還是從這個演算法開始我們的排序之旅。氣泡排序 bubble sort 一種交換排...

氣泡排序 Bubble Sort

維基百科 氣泡排序 演算法思想 不斷的交換相鄰的兩個反序元素,使最小元素 上浮 或使最大元素 下沉 每一趟 冒泡 都會確定乙個最大的元素或最小的元素,同選擇排序類似,演算法總共只需進行n 1趟。將乙個陣列豎著放,低位址在上面,高位址在下面,所謂 上浮 就是較小的元素不斷向低位址靠近,所謂 下沉 就是...