java分治法求最大最小值_Java 分治法求数组的最小最大值

算法思想:如果数组中只有两个元素则较小的为最小值,较大的为最大值;

否则根据下标将数组折半,比较左半部分的最小最大值和右半部分的最小最大值,较小的为最小值,较大的为最大值,此过程递归进行。

Java实现:

/**

* 分治法求数组的最小最大值

* @author cht

*

*/

public class AlgoTest {

public static void main(String[] args) {

new AlgoTest().test();

}

public void test(){

int[] a=new int[]{1,10,2,19,36,0,100};

MinMax mm=getMinMax(a,0,a.length-1);

System.out.println("最小值:"+mm.getMin());

System.out.println("最大值:"+mm.getMax());

}

public MinMax getMinMax(int[] a,int begin,int end){

if(end-begin<=1){

if(a[begin]>a[end]){

return new MinMax(a[end],a[begin]);

}else{

return new MinMax(a[begin],a[end]);

}

}else{

int mid=(begin+end)/2;

MinMax left=getMinMax(a,begin,mid);

MinMax right=getMinMax(a,mid,end);

int min=0,max=0;

min=left.getMin()>right.getMin()?right.getMin():left.getMin();

max=left.getMax()>right.getMax()?left.getMax():right.getMax();

return new MinMax(min,max);

}

}

class MinMax{

public MinMax(int min,int max){

mMin=min;

mMax=max;

}

public int getMin(){

return mMin;

}

public void setMin(int value){

mMin=value;

}

public int getMax(){

return mMax;

}

public void setMax(int value){

mMax=value;

}

private int mMin;

private int mMax;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值