java基礎必備丨經典算法之冒泡排序

冒泡排序是Java中非常經典的一種排序方法,可以將多個數字進行升序排序,效率比較高。

一、冒泡排序的原理

兩個相鄰的數比較大小,將兩個數中較大的數往右邊放,小的往左邊放

二、冒泡排序的圖解

1.首先定義一個數組:int[] arr = {4,2,5,3,1}

2.比較的圖解是這樣的:

三、冒泡排序的思路解析

依次比較前後兩個數的大小,如果後面的比前面的數小,那麼直接將小的放在左邊,大的數放在右邊,以此類推

例如我們定義的數組:int[] arr = {4,2,5,3,1}
第一圈比較:
    1. 用arr[0]和arr[1]進行比較,那麼2比4小,那麼2往左邊移一位,4往右邊移一位;
    2. 然後用arr[1]和arr[2]進行比較,現在4比5小,所以不動
    3. 再用arr[2]和arr[3]進行比較,現在5比3大,所以將3往左邊移動一位,5往右邊移動一位
    4. 再用arr[4]和arr[4]進行比較,現在5比1大,所以將1往左邊移動一位,5往後邊移動一位,這樣就把最大
        的數放到了最右邊
       *現在通過比較並且移動之後,數組arr中的元素變成了{2,4,3,1,5}
第二圈比較:
    1. 用arr[0]和arr[1]進行比較,那麼2比4小,所以不用動
    2. 用arr[1]和arr[2]進行比較,那麼4比3大,所以將3往左邊移動一位,4往右邊移動一位
    3. 用arr[2]和arr[3]進行比較,那麼4比1大,所以將1往左邊移懂一位,4往右邊移動一位
     *由於最大的已經在最右邊了,所以不用和arr[4]進行比較了,現在通過第二圈比較之後的數組元素變成了{2,3,1,4,5}
     *注意,現在第二圈比較的次數少了一次
第三圈比較:
    1. 用arr[0]和arr[1]進行比較,那麼2比3小,所以不用動
    2. 用arr[1]和arr[2]進行比較,那麼3比1大,所以將1往左邊移動一位,3往右邊移動一位
     *現在通過第三圈的比較,數組中的元素變成了{2,1,3,4,5}
     *注意,現在第三圈比較的次數又少了一次
第四圈比較:
    1.用arr[0]和arr[1]進行比較,那麼2比1大,所以將1往左邊移動一位,2往右邊移動一位
     *現在用過第四圈的比較,數組中的元素變成了{1,2,3,4,5},這樣就比較完成了
      那麼通過這4圈的比較,可以確定我們數組的長度爲5,但是我們比較了4次,所以我們可以確定,我們循環比較了4圈
所以,外層for循環可以確定爲for(int i = 0,i<arr.length-1;i++).
每一圈比較的次數都會比上一圈的比較次數少1次,那麼可以推斷出來
    a) 進行第一圈元素比較時,內層循環次數爲數組長度 - 1
    b) 進行第二圈元素比較時,內層循環次數爲數組長度 - 2
    c) 依次類推,得出結論:進行第n圈元素比較時,內層循環次數爲數組長度 - n
那麼這個n的變化特點其實是跟外層for循環中的i是一致的,所以我們內存for循環可以確定爲
for(int i = 0,i<arr.length-1-i;i++)

四、形成代碼

//冒泡排序
public static void bubbleSort(int[] arr) {
//功能
//外層循環用來控制數組循環的圈數
for (int i = 0; i < arr.length-1; i++) {
//內層循環用來完成元素值比較,把大的元素值互換到後面
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}

五、總結

以上是冒泡排序的具體思路分析,學習冒泡排序需要捋清楚其過程,主要是分析冒泡排序是怎麼比較的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章