文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>分治法求最大值最小值

分治法求最大值最小值

时间:2010-11-01  来源:Goodwin

一个例子:

求出一个数组中的最大值和最小值。

package example;

public class MaxAndMinValue {

        // 直接算法 得到最大值和最小值
        public static void main(String[] args) {
                int[] A = { -18, -16, 9, -5, 7, -40, 0, 35 };
                System.out.println(getMaxValue(A));
                System.out.println(getMinValue(A));
                System.out.println(getMax(A, 0, A.length - 1));

        }

        // 直接算法求最大值
        public static int getMaxValue(int[] array) {
                int Max = 0;
                for (int i = 0; i < (array.length - 1); i++) {
                        if (array[i] == array[i + 1]) {
                                Max = array[i + 1];
                        }
                        if (array[i] < array[i + 1]) {
                                Max = array[i + 1];
                        }
                        if (array[i] > array[i + 1]) {
                                Max = array[i];
                                array[i] = array[i + 1];
                                array[i + 1] = Max;

                        }
                }
                return Max;
        }

        // 直接算法求最小值
        public static int getMinValue(int[] array) {

                int Min = 0;
                for (int i = 0; i < (array.length - 1); i++) {
                        if (array[i] == array[i + 1]) {
                                Min = array[i + 1];
                        } else if (array[i] < array[i + 1]) {
                                Min = array[i];
                                array[i] = array[i + 1];
                                array[i + 1] = Min;
                        } else if (array[i] > array[i + 1]) {
                                Min = array[i + 1];
                        }
                }
                return Min;
        }

        // 用分治法求最大最小值
        public static int getMax(int[] array, int i, int j) {
                int Max1 = 0;
                int Max2 = 0;
                if (i == j) {
                        return Max1 = Max2 = array[j];
                } else if (i == (j - 1)) {
                        Max1 = array[i];
                        Max2 = array[j];
                        return Max1 > Max2 ? Max1 : Max2;
                } else {
                        int mid = (i + j) / 2;
                        Max1 = getMax(array, i, mid);
                        Max2 = getMax(array, mid, j);
                        return Max1 > Max2 ? Max1 : Max2;
                }
        }
}

 

假设数组的大小为8,用直接的算法,最大值最小值总需要比较14次,而用分治算法可以一次性求出最大和最小,只需要10次比较。

相关阅读 更多 +
排行榜 更多 +
翌日波奇狗的历险记手机版下载

翌日波奇狗的历险记手机版下载

休闲益智 下载
怪兽远征安卓版下载

怪兽远征安卓版下载

角色扮演 下载
谷歌卫星地图免费版下载

谷歌卫星地图免费版下载

生活实用 下载