冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在后面。即首先比較第1個和第2個數,將小數放前,大數放后。然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。重復以上過程,仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再大於第2個數),將小數放前,大數放后,一直比較到最小數前的一對相鄰數,將小數放前,大數放后,第二趟結束,在倒數第二個數中得到一個新的最小數。如此下去,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往后放,相當於氣泡往上升,所以稱作冒泡排序。 冒泡排序最好的時間復雜度為 O(n),總的平均時間復雜度為 O(n^2),是一種穩定排序算法。
在編程實現中,一般用二重循環實現,外循環變量設為 i,內循環變量設為 j。外循環重復 n 次,內循環依次重復 n-1, n-2, ……, 1 次。每次進行比較的兩個元素都是與內循環 j 有關的,它們可以分別用 a[j] 和 a [j+1] 標識,i 的值依次為 1, 2, ……, n,對於每一個 i,j 的值依次為 1, 2, ……, n-i,例如下面的代碼:
1 for (int i = 0; i < arrys.length; i++) { 2 for(int j = 0;j < arrys.length-i-1; j++){ 3 if(arrys[j] > arrys[j+1]){ //判斷當前數字與后面數字的大小 4 //把大數放后邊 5 } 6 } 7 }
以下是該題目的代碼實現:
1 package com.fhcq.bubblesort; 2 3 public class BubbleSort { 4 5 //主方法 6 public static void main(String[] args) { 7 int[] arr = { 3, 5, 7, 1, 8, 11, 9}; //定義數組 8 bubbleSort (arr); //開始排序 9 } 10 11 //排序方法 12 public static void bubbleSort(int[] arrys) { 13 //定義臨時變量 temp 14 int temp = 0; 15 //用j為下標,遍歷數組 16 for (int j = 0; j < arrys.length; j++) { 17 //對於每一個數組元素,從0到還未來排序的最大下標,總是把最大的數字放在后面 18 for(int k = 0;k < arrys.length-j-1; k++){ 19 if(arrys[k] > arrys[k+1]){ //判斷當前數字與后面數字的大小 20 temp = arrys[k]; 21 arrys[k] = arrys[k+1]; 22 arrys[k+1] = temp; //用temp變量進行換值 23 } 24 } 25 } 26 bubblePrint(arrys); //打印 27 } 28 //打印方法 29 public static void bubblePrint(int[] before){ 30 for(int i = 0;i < before.length; i++){ //遍歷 31 System.out.print(before[i] + ""); //打印,以空格隔開 32 } 33 System.out.println();//換行 34 } 35 }
