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

Java 選擇排序 swap 函數導致數組越界的錯誤分析與修正

     編輯:程式設計綜合問答

錯誤現象

在實現選擇排序時,調用 Swap(arr, arr[i], arr[j]) 導致 ArrayIndexOutOfBoundsException。代碼片段如下:

public static void SelectSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
                Swap(arr, arr[i], arr[j]); // 錯誤調用
            }
        }
    }
}

錯誤原因

  1. 參數傳遞錯誤:Swap 方法期望接收索引值 i 和 j,但傳入了數組元素值 arr[i] 和 arr[j]。當元素值超過數組長度時即發生越界。
  2. 算法邏輯不正確:選擇排序應先在無序區找到最小值索引,再與無序區首元素交換,而非發現較大值即交換。

正確實現

public static void Swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

public static void SelectSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            Swap(arr, i, minIndex);
        }
    }
}

關鍵點總結

  • Swap 傳遞索引而非值。
  • 每輪只交換一次,將最小值移至有序區末尾。
  • 時間複雜度 O(n²),適合小規模數據。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved