資料結構與演算法 氣泡排序演算法

2021-10-24 01:15:36 字數 1250 閱讀 4457

氣泡排序的基本思想是:從前往後依次比較相鄰的兩個元素,(如是從小到大排序)發現數值小的在後面則想換位置,發現數值大的在後面則不變。然後繼續向後比較兩個相鄰的元素,直到比較到最後乙個元素,這一小輪的比較就算完成了,那麼最大的元素肯定可以確定,且排在了最後的位置,然後在開始新的一輪比較,以此類推。。。

例:原始資料為 5,1,4,8,2 需要從小到大排序。

第一輪第一次比較5和1,發現5更大所以交換位置(如下圖)。

第一輪第二次比較5和4,發現5更大所以交換位置。

第一輪第三次比較5和8,發現8更大所以保持不變。

第一輪第四次比較8和2,發現8更大,所以交換位置。

經過第一輪的比較之後,最大的元素為8,並且已經讓它確定在了最後的位置。接下來就需要在前面4個元素中再進行比較。

第二輪第一次比較1和4,發現4更大所以位置不變。

第二輪第二次比較4和5,發現5大所以還是保持不變。

第二輪第三次比較5和2,發現5更大所以交換位置,並確定了5為除去8之外最大的元素,且把它確定在了倒數第二的位置。

繼續在剩下的元素中,進行第三輪的比較。

第三輪第一次比較1和4,發現4更大,所以位置不發生改變。

第三輪第二次比較4和2,發現4更大,所以位置交換,並確定4的位置。

再繼續在剩下的元素中,進行比較。

第四輪第一次比較1和2,發現2大,所以不交換位置。至此排序結束。

在這個例子中,我們能發現一共需要進行排序的總輪數是總元素數減一。如上例子一共有5個元素,那麼只需要進行4輪的比較即可。每一輪的比較次數,我們發現是逐漸遞減的,因為每經過一輪的排序,就可以確定乙個元素,下一輪排序的元素就會少乙個。

public

class

bubblesort

;int t =0;

for(

int i =

0; i < array.length -

1; i++)}

}for

(int a:array)

}}

這個是最基本的氣泡排序的實現,但是有一些特殊情況在進行一半時,元素就已經排列好了,這時我們只需要加乙個判斷,如果有一輪沒有任何一次判斷發生位置的改變時,我們就可以提前結束,因為這時已經排序完成。

資料結構與演算法 氣泡排序

氣泡排序的思想是,從前往後 或從後往前 掃瞄,每找乙個逆序對,就將它更正過來,這樣每一輪總可以找到乙個最大值或最小值。1 從前往後掃瞄,每次找到的較大值插入到後面,第一層迴圈代表當前插入位置。public static void sinksort int nums,int start,int end...

資料結構與演算法 氣泡排序

氣泡排序是一種穩定排序演算法,因為排序過程每次都把其中最大的數或者最小的數上移直至頂端,因此叫氣泡排序。排序過程 依次交換相鄰的兩個數 第一次選出最大的數,第二次選出第二大的數,依次進行,直至n 1個數字置,最後乙個數不用排。複雜度 o n 實現 include using namespace st...

資料結構與演算法 氣泡排序

它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。原理 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第...