初學者實戰代碼
public class ArraySortDemo {
public static void main(String[] args) {
int[] arr = {32, 11, 44, 70, 4, 2, 8, 100, 300, 5, 1};
// 冒泡排序 (升序)
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 輸出結果
for (int num : arr) {
System.out.print(num + " ");
}
// 輸出: 1 2 4 5 8 11 32 44 70 100 300
}
}
代碼解析
- 外層循環
i:控制排序輪數,共 n-1 輪。
- 內層循環
j:每輪將最大值「冒泡」到末尾,範圍逐輪縮減 length-1-i。
- 交換邏輯:臨時變量
temp 完成兩元素位置互換。
- 增強版:加入
boolean swapped 標誌,若某輪無交換提前結束 (最好情況 O(n))。
常見錯誤與修正
| 錯誤代碼 | 問題 | 修正 |
for(int j=0; j<a.length; j++) | 越界訪問 a[j+1] | j < a.length - 1 - i |
if (a[j] < a[j+1]) | 降序而非升序 | 根據需求調整比較方向 |
| 交換邏輯寫錯 | 數據丟失 | 必須用臨時變量三步交換 |
直接打印 arr | 輸出地址而非內容 | 遍歷打印或 Arrays.toString(arr) |
生產環境建議
// 一行搞定,高性能、穩定、無腦
Arrays.sort(arr); // 基本類型雙軸快排
Arrays.parallelSort(arr); // 大數據量多核並行 (JDK 8+)
手寫排序僅為面試/教學/特殊約束場景,實際開發**堅決使用標準庫**。
- 上一篇文章: Java 排序算法實現與複雜度分析:冒泡、選擇、插入排序詳解
- 下一篇文章: 2009 年十大 Java 技術趨勢前瞻:重構與新生態
Copyright ©
程式碼之家 All Rights Reserved