自我學習總結之氣泡排序(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趟。將乙個陣列豎著放,低位址在上面,高位址在下面,所謂 上浮 就是較小的元素不斷向低位址靠近,所謂 下沉 就是...