您的位置:首页 > 编程语言 > Java开发

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

2013-12-31 15:51 423 查看
算法思想:如果数组中只有两个元素则较小的为最小值,较大的为最大值;

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

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 java 递归
相关文章推荐