排序演算法 02氣泡排序

2021-09-18 02:30:18 字數 2534 閱讀 5823

氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個(將大的那乙個元素往後移動,小的元素往前移動)。

從開始第一對,到最後一對,依次比對每一次相鄰元素,重複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次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...