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趟。將乙個陣列豎著放,低位址在上面,高位址在下面,所謂 上浮 就是較小的元素不斷向低位址靠近,所謂 下沉 就是...