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

上大王 分享于 8小时前 9584阅 0人收藏此代码, 我要收藏

求数组的最大值和最小值,返回值在maxValue和minValue。
下面的代码采用了两种不同的方法实现,非常有借鉴意义。
代码转自:http://blog.csdn.net/wujunokay/article/details/12113597


方法一:

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

// 求数组的最大值和最小值,返回值在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) ; // 总的最小值
}


//该代码片段来自于: http://www.sharejs.com/codes/cpp/8763

用循环,实现如下:

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];  
        }  
    }  
}  


//该代码片段来自于: http://www.sharejs.com/codes/cpp/8763
测试代码:

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;  
}  

//该代码片段来自于: http://www.sharejs.com/codes/cpp/8763

标签:
  • 数组
  • 最大值
  • 最小值