氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個(將大的那乙個元素往後移動,小的元素往前移動)。
從開始第一對,到最後一對,依次比對每一次相鄰元素,重複1
的操作,這樣執行完成後,最後的元素應該是最大的數。
重複上述步驟,除了前幾次已經排序好的大數。即前幾次每次排序的最大數
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
@test
public
void
dubblesort()
; log.
info
("sort before:{}"
, json.
tojson
(arr));
//外迴圈,為什麼length-1?因為:內迴圈會遍歷每乙個元素,進行兩兩比較,內迴圈每迴圈結束一次,會有乙個最大值排在末尾索引
//所以外迴圈可以-1,減少一次空迴圈
for(
int i =
0; i < arr.length -
1; i++)}
} log.
info
("sort after:{}"
, json.
tojson
(arr));
}
在某些時候,迴圈還未終止,整個陣列已經排好序,此時應及時終止迴圈。(冒泡每次都會比較相鄰兩個數並交換次序不對的組,若一次迴圈後,都沒進行交換,則已經完成排序)。
**實現如下:
@test
public
void
bubblesort1()
; log.
info
("sort before:{}"
, json.
tojson
(arr));
for(
int i =
0; i < arr.length -
1; i++)}
//如未發生交換,則退出迴圈
if(bool)
} log.
info
("sort after:{}"
, json.
tojson
(arr));
}
雞尾酒是氣泡排序的公升級版,該排序從左往右找出最大值後。再從右往左,找出最小值,類似雞尾酒攪拌左右迴圈。在某些情況下,優於氣泡排序。
以序列(2,3,4,5,1)為例,雞尾酒排序只需要訪問兩次(公升序降序各一次 )次序列就可以完成排序,但如果使用氣泡排序則需要四次。
初始陣列:
第一次排序:
從頭到尾,將大數排在陣列尾部
第 1 次比較:8>2 交換位置: ->
第 2 次比較:8>3 交換位置: ->
第 3 次比較:8>1 交換位置: ->
第 4 次比較:8<9 不做處理:
從尾到頭,因9的排序位置已經確認,所以忽略9,從8開始,將小數排在陣列頭部
第 1 次比較:8>1 不做處理:
第 2 次比較:1<3 交換位置: ->
第 3 次比較:1<2 交換位置: ->
此時:最小的數值已經排序出來
第二次排序:
從頭到尾,將大數排在陣列尾部,因1的排序位置已經確認,所以忽略1,從2開始,將大數排在陣列尾部
第 1 次比較:2<3 不做處理:
第 2 次比較:3<8 不做處理:
至此,排序完成
**實現如下:
public
void
bubblesort3()
; log.
info
("sort before:{}"
, json.
tojson
(arr));
//從頭到尾,再從尾到頭,為一次完整回合,所以,做多遍歷 arr.length / 2 次
for(
int i =
0; i < arr.length >>>
1; i++)}
if(bool)
else
- 2 - i = arr.length - 1 - (i + 1)
//同上,arr.length-1-i 為上面迴圈選定的最大值,需要向前推一位 即 -(i+1)
for(
int h2l = arr.length -
2- i; h2l > i; h2l--)if
(bool)
} log.
info
("sort after:{}"
, json.
tojson
(arr));
}
常用的排序演算法(02) 氣泡排序
從頭開始比較相鄰的元素,如果後面的比前面的小,就交換。通過第一次迴圈找到最大的元素,並將其放在陣列的最後位置。依次迴圈,直至陣列中的所有元素都排好序。include includeusing namespace std 氣泡排序 void sortbybubble int array,int len...
排序演算法 氣泡排序
一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...
排序演算法 氣泡排序
從基礎重新抓起。氣泡排序 每次從陣列頭到尾選出最大或者最小的,排到尾部或者頭部。以排序結果從小到大為例 每次從陣列中把最大的調換到末尾。eg.元素個數 count,需要找count 1次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...