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

Java 排序演算法實作:冒泡排序與 Comparable 介面自訂物件排序

     編輯:Java 相關知識

排序是基礎演算法必修課。本文提供冒泡排序 (教學用)與Comparable 介面實作物件排序 (實務標準)兩套完整代碼。

1. 冒泡排序 (int 陣列,降序)

int[] a = {10,15,19,11,14,16,21,23,16,18,19};
for (int i = 0; i < a.length - 1; i++) {
    for (int j = 0; j < a.length - i - 1; j++) {
        if (a[j] < a[j+1]) { // 降序:前小於後則交換
            int tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp;
        }
    }
}
// 輸出: 23 21 19 19 18 16 16 15 14 11 10

⚠️ **教學演示用**,實務 **嚴禁** 用冒泡,**請用 Arrays.sort() / Collections.sort() (TimSort, O(n log n))**。

2. 物件排序:實作 Comparable

class Person implements Comparable {
    private String name;
    private int age;
    // getter/setter/建構子 省略

    @Override
    public int compareTo(Person o) {
        return Integer.compare(this.age, o.age); // 年齡升序
        // 多欄位: return Comparator.comparing(Person::getAge).thenComparing(Person::getName).compare(this, o); // Java 8+
    }
}

// 使用
List list = Arrays.asList(new Person("A",30), new Person("B",20), new Person("C",25));
Collections.sort(list); // 或 list.sort(null);
// 結果: B(20), C(25), A(30)

3. Comparator 策略模式 (不修改類、多種排序)

// 年齡降序
list.sort(Comparator.comparing(Person::getAge).reversed());
// 名稱升序
list.sort(Comparator.comparing(Person::getName));
// 空值安全
list.sort(Comparator.nullsLast(Comparator.comparing(Person::getAge)));

效能與選型建議

場景推薦做法複雜度
基本型別陣列Arrays.sort(arr)O(n log n) TimSort
List<基本型別/包裝型別>Collections.sort(list) / list.sort(null)O(n log n)
List<自訂物件> 自然順序實作 Comparable + Collections.sort()O(n log n)
List<自訂物件> 多種順序list.sort(Comparator...) (Java 8+)O(n log n)
平行排序 (大數據)Arrays.parallelSort(arr) (Java 8+)多核並行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved