编辑代码

class Main {

    // 内部类,方便得到最大值和最小值
    public class MaxMain {
        private int max;
        private int min;

        public MaxMain(int max, int min) {
            this.max = max;
            this.min = min;
        }

        public int getMax() {
            return max;
        }

        public int getMin() {
            return min;
        }
    }

    // main方法,程序入口
    public static void main(String[] args) {
        new Main().test();
    }

    /**
     * 得到最大、最小
     *
     * @param a:操作的数组
     * @param began:开始的下标
     * @param end:结束的下标
     * @return 含有最大值和最小值的对象
     */
    public MaxMain getMaxMin(int[] a, int began, int end) {
        if (end - began <= 1) {
            return a[began] <= a[end] ? new MaxMain(a[end], a[began]) : new MaxMain(a[began], a[end]);
        } else {
            // 将数组分为两部分
            int mid = began + (end - began) / 2;
            // 得到左边的最大、最小
            MaxMain left = getMaxMin(a, began, mid);
            MaxMain right = getMaxMin(a, mid, end);
            // 定义两个局部变量,用来储存最大、最小值,以便实例MaxMin类返回结果
            int max = 0;
            int min = 0;
            max = left.getMax() >= right.getMax() ? left.getMax() : right.getMax();
            min = left.getMin() <= right.getMin() ? left.getMin() : right.getMin();
            return new MaxMain(max, min);
        }
    }

    // 测试数据
    public void test() {
        int[] a = {11, 9, 20, 56, 42, 3, 7, 15, 16};
        System.out.print("序列为:");
        for (int arrays : a) {
            System.out.print(arrays + " ");
        }
        System.out.println();
        MaxMain result = getMaxMin(a, 0, a.length - 1);
        System.out.println("最大值:" + result.getMax());
        System.out.println("最小值:" + result.getMin());
    }
}