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

Java 陣列最大值與最小值交換位置

     編輯:Java 相關知識

陣列極值交換實作

需求:輸入陣列,將最大值與第一個元素交換,最小值與最後一個元素交換,最後輸出陣列。

完整程式碼


import java.util.*;

public class SwapMinMax {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("輸入陣列長度:");
        int n = sc.nextInt();
        int[] a = new int[n];

        for (int i = 0; i < n; i++) {
            System.out.print("輸入第 " + (i+1) + " 個數:");
            a[i] = sc.nextInt();
        }

        int maxIdx = 0, minIdx = 0;
        for (int i = 1; i < n; i++) {
            if (a[i] > a[maxIdx]) maxIdx = i;
            if (a[i] < a[minIdx]) minIdx = i;
        }

        // 交換最大值與首位
        swap(a, 0, maxIdx);

        // 交換最小值與末位
        // 注意:若原最小值就在索引 0,經過第一次交換後已移動到 maxIdx
        if (minIdx == 0) {
            minIdx = maxIdx; // 更新最小值當前位置
        }
        swap(a, n-1, minIdx);

        System.out.println("交換後陣列:" + Arrays.toString(a));
    }

    static void swap(int[] arr, int i, int j) {
        int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
    }
}

關鍵邏輯:minIdx == 0 的邊界情況

若最小值原本在索引 0,第一次交換(最大值與索引 0)會將最小值移動到 maxIdx。因此第二次交換前必須更新 minIdx = maxIdx,否則會錯誤交換。

測試案例

輸入:5 3 1 4 2 5
最大值 5 在索引 4,最小值 1 在索引 1
交換後:1 3 4 2 5 -> 5 3 4 2 1
輸出:[5, 3, 4, 2, 1]

擴充:使用 Java 8 Stream 尋找極值索引


int maxIdx = IntStream.range(0, n).boxed().max(Comparator.comparing(i -> a[i])).get();
int minIdx = IntStream.range(0, n).boxed().min(Comparator.comparing(i -> a[i])).get();

函數式寫法更簡潔,但需注意效能與舊版本相容性。

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