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次,爲啥不是亂序元素的個數呢?答案同理,哈哈
因此代碼如上~