陣列為引用型別。當陣列作為方法參數傳遞時,傳遞的是記憶體地址。方法內對陣列元素的任何修改,直接影響原始陣列,無需回傳值。例如:
public static void sort(int[] arr) { /* 排序邏輯 */ }
// 呼叫後,原陣列順序已改變
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²),適合教學與小規模資料。