02_排序演算法之氣泡排序
阿新 • • 發佈:2020-09-17
1.1 氣泡排序
1.1.1 演算法原理
- 比較相鄰的元素. 如果前一個元素比後一個元素大, 就交換這兩個元素的位置.
- 對每一對相鄰元素做同樣的工作, 從開始第一對元素到結尾的最後一對元素. 最終最後位置的元素就是最大值.
1.1.2 API設計
類名 | Bubble |
---|---|
構造方法 | Bubble(): 建立Bubble物件 |
成員方法 | public static void sort(Comparable[] a); 對陣列內的元素進行排序 private static boolean greater(Comparable v, Comparable w);判斷大小 private static void exch(Comparable[] a, int i, int j) 交換陣列a中索引為i和j處的值 |
1.1.3 演算法實現
package a_sort.a_bubble; /** * 本類為氣泡排序 */ public class Bubble { /** * 對陣列a中的元素進行排序 * * @param a 需要排序的陣列 */ public static void sort(Comparable[] a) { for (int i = a.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { //比較索引j和j+1處的值 if(greater(a[j], a[j+1])){ exch(a, j, j+1); } } } } /** * 判斷元素v是否大於元素w * * @param v 元素v * @param w 元素w * @return v大於w則返回true, 否則為false */ private static boolean greater(Comparable v, Comparable w) { return v.compareTo(w) > 0; } /** * 元素交換 * * @param a 陣列 * @param i 陣列中的元素索引 * @param j 陣列中的元素索引 */ private static void exch(Comparable[] a, int i, int j) { Comparable temp; temp = a[i]; a[i] = a[j]; a[j] = temp; } }
1.1.4 演算法測試
package a_sort.a_bubble;
import java.util.Arrays;
/**
* 氣泡排序測試類
*/
public class BubbleTest {
public static void main(String[] args) {
Integer[] arr = {4, 5, 6, 3, 2, 1};
Bubble.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
1.1.5 氣泡排序時間複雜度分析
- 元素比較的次數為: (n-1) + (n-2) + ...+2 + 1 = n^2/2 - n/2
- 元素交換次數數為: (n-1) + (n-2) + ...+2 + 1 = n^2/2 - n/2
- 總執行次數為: n^2-n
根據大O推導法則, 氣泡排序時間複雜度為O(N^2), 複雜度比較高, 不適合大量資料排序.