DC分治法求数组最大最小值

原创 2012年03月21日 09:05:59
#include<iostream>

void dcMaxMin( int [], int, int, int *, int * );

void dcMaxMin( int arr[], int low, int high, int *tmpMax, int *tmpMin )
{
        if ( high - low <= 1)// 最多俩元素
        {
                if (arr[low] <= arr[high] )
                {
                        *tmpMax = arr[high];
                        *tmpMin = arr[low];
                        return; // 递归出口
                }
                else
                {
                        *tmpMax = arr[low];
                        *tmpMin = arr[high];
                        return; //递归出口
                }
        }

        int min1, min2, max1, max2;
        int mid = ( high - low ) / 2 + low;
        //递归开始
        dcMaxMin(arr, low, mid, &max1, &min1);
        dcMaxMin(arr, mid+1, high, &max2, &min2);

        *tmpMax = max1 < max2 ? max2 : max1;
        *tmpMin = min1 < min2 ? min1 : min2;

}

int main()
{
        int arr[] = {4, 1, 2, 9, 8, 3};
        int len = sizeof ( arr ) / sizeof( int );
        int max, min;
        max = arr[0];
        min = arr[0];
        dcMaxMin(arr, 0, len, &max, &min);
        std::cout << max << "\t" << min << std::endl;

        return 0;
}

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

分治法的思想就是每次将数组一分为二,分别求两部分的最大值与最小值,然后比较哪部分的更大和更小,最后得出整个数组的最大最小值。 源代码如下: /***************************...

用分治法求最大与最小值的问题

  • 2008年12月09日 15:59
  • 502B
  • 下载

《github一天一道算法题》:分治法求数组最大连续子序列和

看书、思考、写代码! /*************************************** * copyright@hustyangju * blog: http://blog.c...

「算法导论」:分治法求最大子数组

时间复杂度:o(nlgn)

分治法求最大

  • 2013年12月25日 21:59
  • 393KB
  • 下载

算法_分治法求最大子数组

1.分治策略思想在于复杂的问题分解为简单的子问题进行求解 2.将一些问题抽象为最大子数组问题并加以解决在现实中是非常实用的   比如,我们想从一段时间的股票价格变化曲线图中计算出其买进股票和卖出股票的...

分治法的经典问题——求数列中最大最小值

前面我们已经了解了分治法的原理和使用,分治法的经典问题——大整数相乘,趁热打铁,来学习一下如何使用分治法来求数列中的最大最小值。利用分治法来分析伪代码时间复杂性代码实现#include #includ...
  • jeffleo
  • jeffleo
  • 2016年12月03日 20:36
  • 1160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DC分治法求数组最大最小值
举报原因:
原因补充:

(最多只允许输入30个字)