Java實作冒泡排序(詳解)
話不多說,直接開始!
沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖沖~
冒泡排序原理
-
比較相鄰的兩個元素,如果第一個比第二個大則交換他們的位置(升序排列,降序則反過來),
-
從串列的開始一直到結尾,依次對每一對相鄰元素都進行比較,這樣,值最大的元素就通過交換“冒泡”到了串列的結尾,完成第一輪“冒泡”,
-
重復上一步,繼續從串列開頭依次對相鄰元素進行比較,已經“冒泡”出來的元素不用比較(一直比較到結尾也可以,已經“冒泡”到后面的元素即使比較也不需要交換,不比較可以減少步驟),
-
繼續從串列開始進行比較,每輪比較會有一個元素“冒泡”成功,每輪需要比較的元素個數會遞減,一直到只剩一個元素沒有“冒泡”時(沒有任何一對元素需要比較),則串列排序完成,
冒泡排序程序
以該一維陣列為例:
int[] array = new int[]{55,33,22,66,11};
第一輪冒泡
- 圖①為第一輪"冒泡"中資料的起始順序柱形圖,只要滿足條件:“前一個元素比后一個元素大,則交換位置順序,否則不交換”,
- array[0]=55 > array[1]=33,條件滿足,交換元素的位置順序,如圖②所示;
- array[1]=55 > array[2]=22,條件滿足,交換元素的位置順序,如圖③所示;
- array[2]=55 < array[3]=66,條件不滿足,不交換元素的位置順序,如圖③所示;
- array[3]=66 > array[4]=11,條件滿足,交換元素的位置順序,如圖④所示;
第一輪"冒泡"演示如圖所示:

第二輪冒泡
- 圖④為第二輪"冒泡"中資料的起始順序柱形圖;
- array[0]33 > array[1]=22,條件滿足,交換元素的位置順序,如圖⑤所示;
- array[1]33 < array[2]=55,條件不滿足,不交換元素的位置順序,如圖⑤所示;
- array[2]55 > array[3]=11,條件滿足,交換元素的位置順序,如圖⑥所示;
第二輪"冒泡"演示如圖所示:

第三輪冒泡
- 圖⑥為第三輪"冒泡"中資料的起始順序柱形圖;
- array[0]=22 < array[1]=33,條件不滿足,不交換元素的位置順序,如圖⑥所示;
- array[1]=33 > array[2]=11,條件滿足,交換元素的位置順序,如圖⑦所示;
第三輪"冒泡"演示如圖所示:

第四輪冒泡
- 圖⑦為第四輪"冒泡"中資料的起始順序柱形圖;
- array[0]=22 > array[1]=11,條件滿足,交換"22"和"11"的位置順序,如圖⑧所示;
第四輪"冒泡"演示如圖所示:

至此,對陣列的冒泡排序的程序就完成啦!
視頻演示效果鏈接:https://www.bilibili.com/video/BV1BA411L7Uj
具體代碼實作
BubbleSort類:
public class BubbleSort {
public static void sort(int array[]) {
//i表示第幾輪“冒泡”,j 表示“走訪”到的元素索引,
// 每一輪“冒泡”中,j 需要從串列開頭“走訪”到 array.length - 1 的位置,
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}
TestMain類
import java.util.Arrays;
public class TestMain {
public static void main(String[] args) {
int[] array = new int[]{55, 33, 22, 66, 11};
//輸出排序前的array陣列
System.out.print("排序前:");
System.out.println(Arrays.toString(array));
//呼叫BubbleSort類中的sort方法對array陣列進行排序
BubbleSort.sort(array);
//輸出冒泡排序后的array陣列
System.out.print("排序后:");
System.out.println(Arrays.toString(array));
}
}
運行結果如下:
排序前:[55, 33, 22, 66, 11]
排序后:[11, 22, 33, 55, 66]
如果還有不理解的小伙伴,可以自己手撕一個冒泡排序的程序圖,寫著寫著、畫著畫著就會,“哇~”!突然的明白了,
ChenSeventeen的第一個CSDN博客,一起記錄學習、成長程序~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278455.html
標籤:java
