標籤:
主要內容是摘自別人的,但是發現範例程式碼有錯,故內容複寫,代碼修改。
原理:臨近的數字兩兩進行比較,按照從小到大(從大到小)進行交換,這樣一趟過去後,最大或最小的數字被交換到了最後一位;
然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束(因為由第一遍排序得知已經把最大(小)數排到末尾了);
接著再從頭開始進行兩兩比較交換,直到倒數第三位時結束(因為由第一遍排序得知已經把最大(小)數排到末尾了,第二遍把第二大(小)的數排到倒數第二位了);
迴圈直到排完序。
例子為從小到大排序,
原始待排序數組| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外迴圈)
第一次兩兩比較6 > 2交換(內迴圈)
交換前狀態| 6 | 2 | 4 | 1 | 5 | 9 |
交換後狀態| 2 | 6 | 4 | 1 | 5 | 9 |
第二次兩兩比較,6 > 4交換
交換前狀態| 2 | 6 | 4 | 1 | 5 | 9 |
交換後狀態| 2 | 4 | 6 | 1 | 5 | 9 |
第三次兩兩比較,6 > 1交換
交換前狀態| 2 | 4 | 6 | 1 | 5 | 9 |
交換後狀態| 2 | 4 | 1 | 6 | 5 | 9 |
第四次兩兩比較,6 > 5交換
交換前狀態| 2 | 4 | 1 | 6 | 5 | 9 |
交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |
第五次兩兩比較,6 < 9不交換
交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |
第二趟排序(外迴圈)
第一次兩兩比較2 < 4不交換
交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |(已經知道最大)
交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |
第二次兩兩比較,4 > 1交換
交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
第三次兩兩比較,4 < 5不交換
交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
第四次兩兩比較,5 < 6不交換
交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
第三趟排序(外迴圈)
第一次兩兩比較2 > 1交換
交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
第二次兩兩比較,2 < 4不交換
交換前狀態| 1 | 2 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
第三次兩兩比較,4 < 5不交換
交換前狀態| 1 | 2 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
第四趟排序(外迴圈)無交換
第一次兩兩比較1<2不交換
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
第一次兩兩比較2<4不交換
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
第五趟排序(外迴圈)無交換
第一次兩兩比較1<2不交換
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
原:| 1 | 2 | 4 | 5 | 6 | 9 |
一:| 1 | 2 | 4 | 5 | 6 | 9 |
二:| 1 | 2 | 4 | 5 | 6 | 9 |
三:| 1 | 2 | 4 | 5 | 6 | 9 |
四:| 1 | 2 | 4 | 5 | 6 | 9 |
五:| 1 | 2 | 4 | 5 | 6 | 9 |
排序完畢,輸出最終結果1 2 4 5 6 9
1 /* 2 By starainDou 3 */ 4 public class Hello { 5 public static void main(String args[]){ 6 int []num = {6,2,4,1,5,9}; 7 for(int i = 0;i<num.length - 1;i++){ 8 for(int j = 0; j<num.length-1-i;j++){ 9 if(num[j]>num[j+1]){10 int temp = num[j];11 num[j] = num[j+1];12 num[j+1] = temp;13 }14 }15 }16 for(int n = 0; n < num.length; n ++){17 System.out.print(num[n]+"\t");18 }19 }20 }
在此感謝原作者
java之冒泡排序(Bubble sort)