超詳細的氣泡排序法 (一學必會)

2021-09-22 12:40:23 字數 1836 閱讀 4602

最近很多剛入門的道友在詢問資料排序的問題,在這裡,我也詳細給大家寫一寫,非常適合初學者,希望能對你有所幫助。

常用的資料排序的方法有:氣泡排序法、插入排序法、選擇排序法、快速排序法、歸併排序、堆排序、希爾排序等!由於篇幅過長,因此,分開講解!

1. 氣泡排序(bubble sort)

冒泡法排序的基本思想:

從前向後(或從後向前)依次比較相鄰兩個元素的大小,如果逆序(與題意要求的順序相反)就進行交換,使最小(最大)的元素上浮(下沉)到本次排序的最前面(最後面),從而完成一趟(pass)排序。下一趟排序時,已經有序的元素不再參與。這樣的話,n個元素需要進行n-1趟排序!!!

舉個例子:4個數字4,6,7,5進行從大到小的排序。

假設這裡是從前向後進行比較,氣泡排序的過程如下:

第一趟:參與數字序列:4,6,7,5

(1)第乙個數4和第二個數6進行比較,4小於6,屬於逆序(題目要求從大到小排序),所以4和6交換,此時的序列變為6,4,7,5;

(2)第二個數4和第三個數7進行比較,4小於7,屬於逆序(題目要求從大到小排序),所以4和7交換,此時的序列變為6,7,4,5;

(3)第三個數4和第四個數5進行比較,4小於5,屬於逆序(題目要求從大到小排序),所以4和5交換,此時的序列變為6,7,5,4;

經過第一趟的排序,使數字序列中最小的數4下沉到最後面,此時4屬於有序的元素,不需要參與到下一趟的排序。

第二趟排序:參與數字序列:6,7,5

(1)第乙個數6和第二個數7進行比較,6小於7,屬於逆序(題目要求從大到小排序),所以6和7交換,此時的序列變為7,6,5,(4);(說明:4用括號括起來,表示屬於有序的元素)

(2)第二個數6和第三個數5進行比較,6大於5,屬於正序(符合題意要求),不交換,此時的序列為7,6,(5,4); (說明:5,4用括號括起來,表示屬於有序的元素)

經過第二趟的排序,使數字序列中第二小的數5下沉到倒數第二個位置,此時5,4屬於有序的元素,不需要參與到下一趟的排序。

第三趟排序:參與數字序列7,6

(1)第乙個數7和第二個數7進行比較,7大於6,屬於正序(符合題意要求),不交換,此時的序列為7,(6,5,4);

最後就剩下乙個數7,就不需要進行排序,排序最終得到的數字串行為:7,6,5,4;

當然也可以從後往前排序,學者可以自己模擬一下排序過程!!

氣泡排序的關鍵點:

(1)採用雙層迴圈:時間複雜度為o(n的平方)

外層迴圈表示的是排序的趟數,n個數字需要n-1趟,因此,外層迴圈的次數是n-1次;

內層迴圈表示的是每一趟排序的數字。根據氣泡排序的思想,第i趟排序後,就會有i個數屬於有序的元素,它們不參與第i+1趟的排序。因此,用乙個迴圈來控制,只是不同的方式的寫法不一樣,望學者理解掌握。

(2)相鄰兩個數只要屬於逆序,就實行交換。正序就不交換,因此,是穩定排序;也就是說,即使序列**現相同的兩個數字,它們不會實施交換,相同數字的相對順序不會發生變化!

為了便於道友們向我諮詢問題,特意開設了乙個免費的知識星球——captianxue,星球提供學習、理財、生活、職場等各類文章和免費答疑!!

} }/*從前往後,實現從大到小的排序*/

for(i=0; i更多的排序演算法:

sort函式排序

氣泡排序

選擇排序

插入排序

快速排序

希爾排序

堆排序

排序演算法(一) 冒泡法排序演算法

冒泡法排序是c語言中比較經典的排序方法。它的基本原理是比較兩個相鄰的元素,將值大的元素交換的右邊。例如我們對5 2 4 3 1這5個數進行由小到大的排序,採用冒泡法的步驟如下所示。第一輪冒泡 第二輪冒泡 第三輪冒泡 第四輪冒泡 經過上面4輪氣泡排序,完成了5個元素的由小到大的排序。下面我們採用c語言...

一維陣列氣泡排序法

氣泡排序法 指數組元素相鄰的兩個比較,將較小的那個調到前頭,實現陣列元素由小到大排列。解題思路如下 a 0 的值大於a 1 大的值往下走,因此a 0 值和a 1 交換,同理,可以得到有n個數,就要進行n 1次比較。實現如下 include include include using namespac...

簡單的氣泡排序法

int main int length 9 for int i 0 iw j for int i 0 i length i cout w i return 0 此種方法,每次排序,都可能將較小的數排序到後邊去,造成重複操作。使用從後往前的比較,比較j和j 1不變動後邊的數,迴圈一次,就講小的數排在最...