分治再帰:配列要素の最大値を求めて、最小値

6152 ワード

// , , 

/**

 *  , 

 * @author Administrator

 *

 */

public class Values {

    private int max;

    private int min;

    

    public Values(int max,int min){

        this.max=max;

        this.min=min;

    }

    public int getMax() {

        return max;

    }

    public void setMax(int max) {

        this.max = max;

    }

    public int getMin() {

        return min;

    }

    public void setMin(int min) {

        this.min = min;

    }

}





/**

 *  , 

 * @author Administrator

 *

 */

public class MinMax {

    public void min_max(int a[],int s,int e,Values values){

        Values lValues=new Values(0,0);

        Values rValues=new Values(0,0);

        

        if(e==s+1||e==s){

            if(a[s]>=a[e]){

                values.setMax(a[s]);

                values.setMin(a[e]);

            }

            else{

                values.setMax(a[e]);

                values.setMin(a[s]);

            }

            return;

        }

        

        int mid=(e+s)/2;

        min_max(a,mid+1,e,lValues);

        min_max(a,s,mid,rValues);

        values.setMax(lValues.getMax()>rValues.getMax()?lValues.getMax():rValues.getMax());

        values.setMin(lValues.getMin()<rValues.getMin()?lValues.getMin():rValues.getMin());

    }

}





/**

 *  , 

 * @author Administrator

 *

 */

public class MinMax {

    public void min_max(int a[],int s,int e,Values values){

        Values lValues=new Values(0,0);

        Values rValues=new Values(0,0);

        

        if(e==s+1||e==s){

            if(a[s]>=a[e]){

                values.setMax(a[s]);

                values.setMin(a[e]);

            }

            else{

                values.setMax(a[e]);

                values.setMin(a[s]);

            }

            return;

        }

        

        int mid=(e+s)/2;

        min_max(a,mid+1,e,lValues);

        min_max(a,s,mid,rValues);

        values.setMax(lValues.getMax()>rValues.getMax()?lValues.getMax():rValues.getMax());

        values.setMin(lValues.getMin()<rValues.getMin()?lValues.getMin():rValues.getMin());

    }

}