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实现:
/**
* 分治法求数组的最小最大值
* @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程序:求一个数组中的最大值丶最小值和平均值。
- Java常识求阶层!的和 ,获取某个数组中的最小值,定义数组,获得成绩之和,平均成绩,最小成绩,最大成绩。等问题大全
- Java程序:求一个数组中的最大值丶最小值和平均值。
- 16.java语言基础-获取数组最大和最小元素
- Java给定一个数组,数组元素是一些正整数,求这些正整数收尾详解得出的最大数或最小数
- java代码数组求平均值,最大值,最小值
- java 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- java快速寻找一个数组的最大值或最小值, min, max,三种方法
- java中数组求最大值、最小值、平均值。
- 最大子数组问题分治法(递归)Java实现
- 小康陪你学JAVA--------得到数组中的最大值和最小值的实例
- java 输入一个数字组成的数组(输出该数组的最大值和最小值)
- JAVA得到数组中最大值和最小值的简单实例
- 【程序35】 ArrayChange.java 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 分治法求数组的最大值和最小值
- [原]Java面试题-输入一个整型数组,找出最大值、最小值,并交换。
- Java 分治法 求解一组数组元素的最大值和最小值
- 6、 java 输入一个数字组成的数组,输出该数组的最大值和最小值
- 分治法 求最大元和最小元 Java语言
- java 一维数组求最大数最小数