算法分析:最值查找 在长度为n的整数列中搜索最大数和最小数 JAVA

【最值查找】请设计一个分治算法,从一个长度为n的整数序列中搜索最大元素和最小元素。

 

算法设计思路

递归把数组分成两个两个对比,比较完排好序,存到一个数组中,然后最大的跟全局变量max比较,最小的跟全局变量min比较,整个数组比较完后则得出序列中最大元素和最小元素

 

算法实现的伪代码

算法cut( int arr[ ],  int first, int  end )

输入:待选数组、数组首位下标、数组末位下标

输出:最大数和最小数

  1. mid = (first +end ) /2
  2. if(一个数或者是两个数作比较)
  3.     比较compare( arr,first,end )传出来的数组里的两个数与max和min的大小
  4.     较大的数比max大则将其赋值到max中
  5.     较小的数比min小则将其赋值到min中
  6. cut(arr,first,mid)
  7. cut(arr,mid+1,end)

 

实现代码

public class Main {
    static int max = 0,min = 0;

    public static void main(String[] args) {
        int[] arr = {5, 4, -2, 3, 6, 1, 7,1,2,3,4,5,6,6,7,8,1,3,4,2,2,4,3,345345,3,345,53,-231231,423};
        max = arr[0];
        min = arr[0];
        cut(arr, 0, arr.length - 1);
        System.out.println("MAX:"+max);
        System.out.println("MIN:"+min);
    }

    public static void cut(int[] arr, int first, int end) { //递归分割
        int mid = (first + end) / 2;
        if (end - first == 1 || end - first == 0) { //分割成一个数或者两个数
            int[] mm;
            mm = compare(arr, first, end); //接收两个数大小比较的结果
            if(arr[mm[0]]>max)
                max = arr[mm[0]];
            if(arr[mm[1]]<min)
                min = arr[mm[1]];
        } else {   //前半段和后半段递归
            cut(arr, first, mid);
            cut(arr, mid + 1, end);
        }
    }

    public static int[] compare(int[] arr, int index1, int index2) { //对比然后排序,大的放前面,小的放后面,然后返回数组
        int[] maxmin = new int[2];
        if (arr[index1] > arr[index2]) {
            maxmin[0] = index1;
            maxmin[1] = index2;
        } else {
            maxmin[1] = index1;
            maxmin[0] = index2;
        }
        return maxmin;
    }
}

 

写得不好,多请谅解!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值