首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 經典排序演算法:氣泡排序與選擇排序完整實作解析

     編輯:Java 綜合教學

Java 經典排序演算法:氣泡排序與選擇排序完整實作解析

核心觀念釐清

參考傳遞與陣列修改

陣列為引用型別。當陣列作為方法參數傳遞時,傳遞的是記憶體地址。方法內對陣列元素的任何修改,直接影響原始陣列,無需回傳值。例如:

public static void sort(int[] arr) { /* 排序邏輯 */ }
// 呼叫後,原陣列順序已改變

實際參數 vs 形式參數

public static void main(String[] args) {
    String name = "彭於晏"; // 實際參數
    sayHello(name);
}
private static void sayHello(String name) { // 形式參數
    System.out.println("Hello " + name + " !");
}

氣泡排序

邏輯: 依序比較相鄰元素,若順序錯誤則交換。每輪將最大元素「浮」至末端。

public void bubbleSort(Integer[] arr) {
    for (int x = 0; x < arr.length - 1; x++) {
        for (int y = 0; y < arr.length - x - 1; y++) {
            if (arr[y] > arr[y + 1]) { // 升序
                swap(arr, y, y + 1);
            }
            printArray(arr); // 觀察每步變化
        }
    }
}
  • -x:減少比較輪數(後段已有序)
  • -1:避免 ArrayIndexOutOfBoundsException

選擇排序

邏輯: 每輪從未排序區間選出最小元素,放到已排序區間末端。

public void selectionSort(Integer[] arr) {
    for (int x = 0; x < arr.length; x++) {
        for (int y = x + 1; y < arr.length; y++) {
            if (arr[x] > arr[y]) { // 升序
                swap(arr, x, y);
            }
            printArray(arr);
        }
    }
}

通用交換與列印方法

public void swap(Object[] arr, int i, int j) {
    Object tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}
public void printArray(Object[] arr) {
    for (int i = 0; i < arr.length; i++) {
        System.out.println("\tarr[" + i + "] --> " + arr[i]);
    }
}

執行結果展示

氣泡排序過程動畫
選擇排序過程動畫

氣泡排序:相鄰交換,元素逐步後移。
選擇排序:直接與當前基準位交換,交換次數較少。
兩者時間複雜度均為 O(n²),適合教學與小規模資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved