• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C语言求数组的最大值和最小值

OC/C/C++ 水墨上仙 2145次浏览

求数组的最大值和最小值,返回值在maxValue和minValue。

下面的代码采用了两种不同的方法实现,非常有借鉴意义。

代码转自:http://blog.csdn.net/wujunokay/article/details/12113597

方法一:

分治法(Divide&nbspand&nbspcouquer),将数组分成左右两部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然后综合起来求总体的最大值及最小值。这是个递归过程,对于划分后的左右两部分,同样重复这个过程,直到划分区间内只剩一个元素或者两个元素。



// 求数组的最大值和最小值,返回值在maxValue和minValue
void MaxandMin(int *a, int l, int r, int& maxValue, int& minValue)
{
    if(l == r) // l与r之间只有一个元素
    {
        maxValue = a[l] ;
        minValue = a[l] ;
        return ;
    }
	
    if(l + 1 == r) // l与r之间只有两个元素
    {
        if(a[l] >= a[r])
        {
            maxValue = a[l] ;
            minValue = a[r] ;
        }
        else
        {
            maxValue = a[r] ;
            minValue = a[l] ;
        }
        return ;
    }
	
    int m = (l + r) / 2 ; // 求中点

	
    int lmax ; // 左半部份最大值
    int lmin ; // 左半部份最小值
    MaxandMin(a, l, m, lmax, lmin) ; // 递归计算左半部份
	
    int rmax ; // 右半部份最大值
    int rmin ; // 右半部份最小值
    MaxandMin(a, m + 1, r, rmax, rmin) ; // 递归计算右半部份
	
    maxValue = max(lmax, rmax) ; // 总的最大值
    minValue = min(lmin, rmin) ; // 总的最小值
}

用循环,实现如下:



void MaxandMinByLoop(int *a, int nCount, int& maxValue, int& minValue)  
{  
    maxValue = a[0];  
    minValue = a[0];  
    for (int i=1; i<nCount; i++)  
    {  
        if (maxValue<a[i])  
        {  
            maxValue = a[i];  
        }  
        else if (maxValue>a[i])  
        {  
            minValue = a[i];  
        }  
    }  
}  

测试代码:



int main()  
{  
    int* a= new int[6];  
    int* b= new int[3];  
      
    a[0]=2;  
    a[1]=5;  
    a[2]=3;  
    a[3]=4;  
    a[4]=7;  
    a[5]=0;  
      
    b[0]=8;  
    b[1]=9;  
    b[2]=6;  
      
    int MaxNum;  
    int MinNm;  
      
    //MaxandMin(b, 0, 2, MaxNum, MinNm);  
    MaxandMin(a, 0, 5, MaxNum, MinNm);  
  
    cout << "MinNm=" << MinNm << ",MaxNum=" << MaxNum <<endl;  
  
    MaxandMinByLoop(b, 3, MaxNum, MinNm);  
    //MaxandMinByLoop(a, 6, MaxNum, MinNm);  
  
    cout << "MinNm=" << MinNm << ",MaxNum=" << MaxNum <<endl;  
      
    delete[] a;  
    a=NULL;  
    delete[] b;  
    b=NULL;  
      
    cout << endl;  
      
    return 0;  
}  


喜欢 (0)
加载中……