氣泡排序(bubblesort)

2021-10-02 21:57:13 字數 2726 閱讀 2540

1.原理:比較兩個相鄰的元素,將值大的元素交換到右邊

2.思路:依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在後面。

(1)第一次比較:首先比較第一和第二個數,將小數放在前面,將大數放在後面。

(2)比較第2和第3個數,將小數 放在前面,大數放在後面。

…(3)如此繼續,知道比較到最後的兩個數,將小數放在前面,大數放在後面,重複步驟,直至全部排序完成

(4)在上面一趟比較完成後,最後乙個數一定是陣列中最大的乙個數,所以在比較第二趟的時候,最後乙個數是不參加比較的。

(5)在第二趟比較完成後,倒數第二個數也一定是陣列中倒數第二大數,所以在第三趟的比較中,最後兩個數是不參與比較的。

(6)依次類推,每一趟比較次數減少依次

3.舉例:

(1)要排序陣列:[10,1,35,61,89,36,55]

(2)第一趟排序:

第一次排序:10和1比較,10大於1,交換位置      [1,10,35,61,89,36,55]

第二趟排序:10和35比較,10小於35,不交換位置  [1,10,35,61,89,36,55]

第三趟排序:35和61比較,35小於61,不交換位置  [1,10,35,61,89,36,55]

第四趟排序:61和89比較,61小於89,不交換位置  [1,10,35,61,89,36,55]

第五趟排序:89和36比較,89大於36,交換位置   [1,10,35,61,36,89,55]

第六趟排序:89和55比較,89大於55,交換位置   [1,10,35,61,36,55,89]

第一趟總共進行了六次比較,排序結果:[1,10,35,61,36,55,89]

(3)第二趟排序:

第一次排序:1和10比較,1小於10,不交換位置  1,10,35,61,36,55,89

第二次排序:10和35比較,10小於35,不交換位置 1,10,35,61,36,55,89

第三次排序:35和61比較,35小於61,不交換位置 1,10,35,61,36,55,89

第四次排序:61和36比較,61大於36,交換位置   1,10,35,36,61,55,89

第五次排序:61和55比較,61大於55,交換位置   1,10,35,36,55,61,89

第二趟總共進行了5次比較,排序結果:1,10,35,36,55,61,89

(4)第三趟排序:

1和10比較,1小於10,不交換位置  1,10,35,36,55,61,89

第二次排序:10和35比較,10小於35,不交換位置 1,10,35,36,55,61,89

第三次排序:35和36比較,35小於36,不交換位置 1,10,35,36,55,61,89

第四次排序:36和61比較,36小於61,不交換位置   1,10,35,36,55,61,89

第三趟總共進行了4次比較,排序結果:1,10,35,36,55,61,89

到目前位置已經為有序的情形了。

4.演算法分析:

(1)由此可見:n個數字要排序完成,總共進行n-1趟排序,每i趟的排序次數為(n-i)次,所以可以用雙重迴圈語句,外層控制迴圈多少趟,內層控制每一趟的迴圈次數

(2)氣泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出乙個較大值。如上例:第一趟比較之後,排在最後的乙個數一定是最大的乙個數,第二趟排序的時候,只需要比較除了最後乙個數以外的其他的數,同樣也能找出乙個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了演算法的量。

(3)時間複雜度

1.如果我們的資料正序,只需要走一趟即可完成排序。所需的比較次數c和記錄移動次數m均達到最小值,即:cmin=n-1;mmin=0;所以,氣泡排序最好的時間複雜度為o(n)。

2.如果很不幸我們的資料是反序的,則需要進行n-1趟排序。每趟排序要進行n-i次比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:

綜上所述:氣泡排序總的平均時間複雜度為:o(n2) ,時間複雜度和資料狀況無關。

5.c**實現

我找到了屬於我的愛,親愛的就跟著我墜入這愛河吧。

向林2023年2月17日於重慶城口

好好學習,天天向上,終有所獲

氣泡排序 bubble sort

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

氣泡排序(Bubble Sort)

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

氣泡排序 Bubble Sort

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