Java获取数值中最大最小值

以下是关于获取数组里的最大值和最小值的几种方法:

 

方法一

该方法使用交换顺序来寻找最大值,但查找完以后会污染数组,不能同时运行寻最大值方法和最小值方法。

/*获取数组里的最大值和最小值*/

public class TestFindArrayNum {

    public static void main(String[] args) {

        int[] arr = {500,11,12,100,11,13,1,3,5,205,7,9,2,4,6,8,400,0,300,10};

        findMaxNum(arr);

        //使用寻找最小值方法之前要先注释掉寻找最大值的方法

        //因为使用完寻找最大值的方法后会污染数组,整个数组都会变为最大值500

        //findMinNum(arr);

    }

    private static void findMaxNum(int[] arr) {

        int maxNum = 0;

        for (int i = 0; i <arr.length-1 ; i++) {

            if(arr[i+1]>arr[i]){

                maxNum = arr[i+1];

            }else{

                arr[i+1]=arr[i];

                maxNum = arr[i];

            }

        }

        System.out.println("数组中最大值是"+maxNum);

    }

 

    private static void findMinNum(int[] arr) {

        int minNum = 0;

        for (int i = 0; i <arr.length-1 ; i++) {

            if (arr[i+1]<arr[i]){

                minNum = arr[i+1];

            }else {

                arr[i+1] =arr[i];

                minNum = arr[i];

            }

        }

        System.out.println("数组中最小值是"+minNum);

    }

}

方法二

方法二代码更加简洁且不会污染数组

/*获取数组里的最大值和最小值*/

public class TestFindArrayNum2 {

    public static void main(String[] args) {

        int[] arr = {500,11,12,100,11,13,1,3,5,205,7,9,2,4,6,8,400,0,300,10};

        findMaxNum(arr);

        findMinNum(arr);

    }

    private static void findMaxNum(int[] arr) {

        int max = arr[0];

        for (int i = 1; i <=arr.length-1 ; i++) {

            if (max<arr[i]){

                max=arr[i];

            }

        }

        System.out.println("数组中最大值"+max);

    }

    private static void findMinNum(int[] arr) {

        int min = arr[0];

        for (int i = 1; i <=arr.length-1 ; i++) {

            if (min>arr[i]){

                min=arr[i];

            }

        }

        System.out.println("数组中最小值"+min);

    }

}

但是方法二称不上最优算法,假设数组中有n个元素,因为最差的情况要比较 2*(n-1)次,即2n-2次。

arr[0]要和接下来的n-1个数比较一次,要找到最大值和最小值即要比较两个n-1次。

 

方法三

public class TestFindArrayNum3 {

    private int max;

    private int min;

 

    public int getMax() {

        return max;

    }

 

    public int getMin() {

        return min;

    }

 

    public void FindMaxAndMin(int[] arr ){

        if (arr==null){

            System.out.println("输入的数组为空");

            return;

        }

        int i = 0;

        int len = arr.length;

        max = arr[0];

        min = arr[0];

        //两两分组,把较小的数挪到左边,较大的数挪到右边

        for (i = 0; i <len-1 ; i+=2) {

            if (arr[i]>arr[i+1]){

                int tmp = arr[i];

                arr[i] = arr[i+1];

                arr[i+1] = tmp;

            }

        }

        //最小值放在各个分组的左边

        min = arr[0];

        for (i = 2; i <len ; i+=2) {

            if (arr[i]<min){

                min = arr[i];

            }

        }

        //最大值放在各个分组的右边

        max = arr[1];

        for (i = 3; i < len; i+=2) {

            if (arr[i]>max){

                max = arr[i];

            }

        }

        //如果数组中元素个数是奇数个,最后一个元素被分为一组,需要特殊处理

        if (len%2==1){

            if (max<arr[len-1])

            max = arr[len-2];

            if (min>arr[len-1])

            min = arr[len-1];

        }

    }

    public static void main(String[] args) {

        int[] arr={500,11,12,100,11,13,1,3,5,205,7,9,2,4,6,8,400,0,300,10};

        TestFindArrayNum3 f = new TestFindArrayNum3();

        f.FindMaxAndMin(arr);

        System.out.println("最大值是"+f.getMax());

        System.out.println("最小值是"+f.getMin());

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值