氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。
它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。
1) 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2) 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3) 針對所有的元素重複以上的步驟,除了最後乙個。
4) 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
5) 例子為從小到大排序,
6) 原始待排序陣列| 6 | 2 | 4 | 1 | 5 | 9 |
7) 第一趟排序(外迴圈)
8) 第一次兩兩比較6 > 2交換(內迴圈)
9) 交換前狀態| 6 | 2 | 4| 1 | 5 | 9 |
10) 交換後狀態| 2 | 6 | 4| 1 | 5 | 9 |
11) 第二次兩兩比較,6 > 4交換
12) 交換前狀態| 2 | 6 | 4 | 1 | 5 | 9 |
13) 交換後狀態| 2 | 4 | 6 | 1 | 5 | 9 |
14) 第三次兩兩比較,6 > 1交換
15) 交換前狀態| 2 | 4 | 6 | 1 | 5 | 9 |
16) 交換後狀態| 2 | 4 | 1 | 6 | 5 | 9 |
17) 第四次兩兩比較,6 > 5交換
18) 交換前狀態| 2 | 4 | 1 | 6 | 5 | 9 |
19) 交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |
20) 第五次兩兩比較,6 < 9不交換
21) 交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
22) 交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |
23) 第二趟排序(外迴圈)
24) 第一次兩兩比較2 < 4不交換
25) 交換前狀態| 2 | 4 | 1| 5 | 6 | 9 |
26) 交換後狀態| 2 | 4 | 1| 5 | 6 | 9 |
27) 第二次兩兩比較,4 > 1交換
28) 交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
29) 第三次兩兩比較,4 < 5不交換
30) 交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
31) 第四次兩兩比較,5 < 6不交換
32) 交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
33) 交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
34) 第三趟排序(外迴圈)
35) 第一次兩兩比較2 > 1交換
36) 交換後狀態| 2 | 1 | 4| 5 | 6 | 9 |
37) 交換後狀態| 1 | 2 | 4| 5 | 6 | 9 |
38) 第二次兩兩比較,2 < 4不交換
39) 交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
40) 第三次兩兩比較,4 < 5不交換
41) 交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
42) 第四趟排序(外迴圈)無交換
43) 第五趟排序(外迴圈)無交換
44) 排序完畢,輸出最終結果12 4 5 6 9
C語言 氣泡排序
氣泡排序 兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止 將整個待排序的記錄序列分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄 對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的向後移 像水中的氣泡,體積大的先浮起...
氣泡排序 C語言
c語言是比較簡單基礎的排序方式,排序效率並不高,但是很穩定。通過rand隨機生產10個小於20的數來測試排序。氣泡排序 include include include void bubblesortbetter int a,int n 改進 if flag 0 break void bubbleso...
C語言 氣泡排序
直接看 吧 include void bubblesort int r,int len if exchange 如果沒有發生交換,提前終止演算法 return int main bubblesort aa,10 for int i 0 i 10 i printf d aa i printf n re...