java冒泡排序

public static void main(String[] args) throws InterruptedException{
    int[] a = {9,8,11,2,4,1,3,7,5,6,20,1};

    //大循環,循環n-1次便可(循環一次,出來一個值,冒一次泡),這個i從1開始,是爲了小循環中a.length-1便可,若是從0開始,則小循環中爲a.length-(i+1)
    for(int i=1;i<a.length;i++){
        //小循環,控制每次比較(循環次數每通過一次大循環就少一次,由於每次大循環,就出來一個已知的順序)
        for(int j=0;j<a.length-i;j++){
            if(a[j]>=a[j+1]){
                int temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }

}

舉例說明,如一個數組有四個元素   2,1,4,3數組

冒泡排序爲相鄰元素比較,若是前一個比後一個大,則交換位置,排序

第一次大循環:io

第一次比較 2和1比較,結果 1,2,4,3循環

第二次比較 1和4比較,結果 1,2,4,3static

第三次比較 4和3比較,結果 1,2,3,4void

經歷過上面3次比較,最大值4就出來了,其實上面3次比較就是代碼中所謂的小循環

第二次大循環:

第一次比較 1和2比較,結果 1,2,3,4

第二次比較 2和3比較,結果 1,2,3,4

這裏已經不須要第三次比較,由於最大值4在通過第一次大循環後,肯定了。因而可知,第二次小循環次數比第一次小循環少了一次

以此類推,第三次大循環裏的小循環會比第二次大循環的小循環少一次。

由上面能夠知道,每次大循環,都會肯定一個排好順序的值,如第一次大循環會肯定4,第二次大循環會肯定3,因此若是有4個元素的數組,大循環4-1次,則能夠肯定最終排序。(有人問,4個元素,不該該大循環四次才能夠都肯定嗎?可是這裏就是不須要,爲啥呢?哈哈)

小循環的次數爲,亂序元素的個數減1次,爲啥不是亂序元素的個數呢?答案同理,哈哈

因此代碼如上~

相關文章
相關標籤/搜索