氣泡排序( Bubble Sort )
阿新 • • 發佈:2020-09-14
需求:
排序前:{4,5,6,3,2,1}
排序後:{1,2,3,4,5,6}
排序原理:
- 比較相鄰的元素。如果前一個元素比後一個元素大,就交換這兩個元素的位置。
- 對每一對相鄰元素做同樣的工作,從開始第一對元素到結尾的最後一對元素。最終最後位置的元素就是最大值。
API設計
程式碼實現
package sort; //氣泡排序 public class Bubble { public static void sort(Comparable[] a) { for (int i = a.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (greater(a[j], a[j + 1])) { exch(a, j, j + 1); } } } } /* 比較v元素是否大於w元素 */ private static boolean greater(Comparable v, Comparable w) { return v.compareTo(w) > 0; } /* 陣列元素i和j交換位置 */ private static void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } }
package test;
import sort.Bubble;
import java.lang.reflect.Array;
import java.util.Arrays;
//測試類
public class TestBubble {
public static void main(String[] args) {
Integer[] a = {4, 5, 6, 3, 2, 1};
Bubble.sort(a);
System.out.println(Arrays.toString(a));
}
}
複雜度分析
元素比較的次數為:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)(N-1)/2=(N^2-N)/2;
元素交換的次數為:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)
總執行次數為:
(N2/2-N/2)+(N2/2-N/2)=N^2-N;
按照大O推導法則,保留函式中的最高階項那麼最終氣泡排序的時間複雜度為O(N^2).