用分治法求一个数组的最大最小值

原创 2006年06月26日 12:15:00
问题:用分治法来求解一个数组的最大最小值
     
分析:用遍历的方法来求解当然很简单,但是题目给我们的要求是用分治法,因此我们需要每次利用递归来求数组的一个小部分的最大最小值,递归的结束条件是数组中有两个元素或者一个元素。
     
下面是C语言源代码:(在Linux Ubuntu下gcc 4.0 编译通过 )
  
 
#include <stdio.h>
    
// find the max and min value between a[m] and a[n]
void max_min(int a[],int m, int n, int* max,int* min) 
{
    int middle,hmax,hmin,gmax,gmin;
   
    if( m==n )
    {
        *max = * min = a[m];
    }
    else if(m == n-1)
    {
        if( a[m] > a[n])
        {
            *max = a[m];
            *min = a[n];
        }
        else
        {
            *max = a[n];
            *min = a[m];
        }
    }
    else
    {
        middle = (m+n)/2;
        max_min(a,m,middle,&gmax,&gmin);
        max_min(a,middle+1,n,&hmax,&hmin);
        if(gmax > hmax)
        {
            *max = gmax;
        }
        else
        {
            *max = hmax;
        }
        if(gmin < hmin)
        {
            *min = gmin;
        }
        else
        {
            *min = hmin;
        }
    }
}
     
int main(int argc,char * argv[])
{
    int max,min;
    int num_elem = argc-1;
    int i;
    int * array = (int *)malloc( (argc-1) *sizeof(int) );
    for(i=1;i<argc;i++)
    {
        array[i-1]= atoi(argv[i]);
    }
    
    max_min(array,0,num_elem-1,&max,&min);
       
    printf("The max is %d ,the min is %d /n",max,min);
    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
  • 1178
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用分治法求一个数组的最大最小值
举报原因:
原因补充:

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