氣泡排序法(BubbleSort)——交換類排序法(java實現)
阿新 • • 發佈:2019-01-08
氣泡排序法
從陣列的第一個元素arr[0]開始,兩兩比較arr[0]與arr[0+1],如果前面的數大於後面的數(arr[i]>arr[i+1]),那麼交換兩個元素的位置,把大的數往後移動。這樣依次經過一輪比較以後,最大的數將會被交換到最後的位置arr[arr.length-1]。
接下來進行下一輪的比較,此輪比較的次數較上一輪少一次,因為上一輪中的最大值已經排到最後面。以此進行迴圈,直到排序結束。
氣泡排序法的最壞時間複雜度和平均時間複雜度都為O(n²),最壞需要比較的次數為n(n-1)/2。
圖解如下
陣列排序前 7 23 12 4 33 21 2 17 13 9
第一輪排序 7 12 4 23 21 2 17 13 9 33
第二輪排序 7 4 12 21 2 17 13 9 23
第三輪排序 4 7 12 2 17 13 9 21
第四輪排序 4 7 2 12 13 9 17
第五輪排序 4 2 7 12 9 13
第六輪排序 2 4 7 9 12
第七輪排序 2 4 7 9
第八輪排序 2 4 7
第九輪排序 2 4
程式碼實現(java)
public class BubbleSort {
public static void main(String[] args){
int arr[] = {6,10,5,2,3,7,9,1};
bubblesort(arr);
pt(arr);
}
public static void bubblesort(int arr[]){
for(int i = 0 ; i < arr.length-1 ; i++){ //將第i+1個最大值放到陣列後面
for (int j = 0 ; j < arr.length-i-1 ; j++){ //對相鄰元素進行比較、取逆。
if(arr[j] > arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
//封裝交換位置方法。
public static void swap(int arr[],int a , int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void pt(int arr[]){
for(int a:arr)
System.out.print(a+" ");
System.out.println();
}
//有的同學可能會用這個函式進行交換,這個函式在C++中是可用的,而在Java中是無效的。
/*
原因:
java中基本資料型別為值傳遞(pass in value)
swap_error中的引數a與b是形參,呼叫此方法的arr[j],arr[j+1]為實參
呼叫此方法後,實參將值傳遞給形參a,b 由形參a,b再進行值的互換。
由於是不是引用傳遞而是值傳遞,在呼叫此方法後,其arr[j],arr[j+1]實際並沒有發生變化。
*/
public static void swap_error(int a , int b){
int temp = a;
a = b;
b = temp;
}
}
//Think Big, Think Long