最大值-最小值

 

求最大最小的时候有点小技巧,就是我们两个两个的比较,把大个跟当前最大比较,小的跟当前最小的比较,这样就会节约一点比较时间,有原来的2*n到3*n / 2。

#include <stdio.h>   
#include <stdlib.h>   
  
//得到最大最小值   
int GetMaxMin(int nData[], int nLen, int* pnMax, int* pnMin)  
{  
    int nMax = nData[0];            //初始化最大值为第一个元素   
    int nMin = nData[0];            //初始化最小值为第一个元素   
    int i;                            //下标控制i   
  
    //遍历元素,两两比较   
    for (i = 1; i + 1 < nLen; i += 2)  
    {  
          
        if (nData[i] > nData[i + 1])    //如果第一个数比第二个数大   
        {  
            if (nMax < nData[i])        //用第一个数与nMax比较   
            {  
                nMax = nData[i];  
            }  
            if (nMin > nData[i + 1])    //用第二个数与nMin比较。   
            {  
                nMin = nData[i + 1];  
            }  
        }  
        else                            //如果第一个数不大于第二个数   
        {  
            if (nMax < nData[i + 1])    //用第二个数与nMax比较   
            {  
                nMax = nData[i + 1];  
            }  
            if (nMin > nData[i])        //用第一个数与nMin比较   
            {  
                nMin = nData[i];  
            }  
        }  
    }  
  
    if (i < nLen)                    //确定是否都比较了,如果nLen为偶,可能最后一个数没有比较   
    {  
        if (nMax < nData[i])        //比较最后一个数。   
        {  
            nMax = nData[i];  
        }  
        else if (nMin > nData[i])  
        {  
            nMin = nData[i];  
        }  
    }  
  
    *pnMax = nMax;                    //保存结果   
    *pnMin = nMin;                    //返回结果。   
  
    return 1;  
};  
  
//得到最小值   
int GetMin(int nData[], int nLen)  
{  
  
    int nMin = nData[0];        //初始化nMin为第一个数据   
    for (int i = 1; i < nLen; ++i)    //遍历数据一一同nMin比较   
    {  
        if (nMin > nData[i])  
        {  
            nMin = nData[i];  
        }  
    }  
    return nMin;                //返回最小值   
}  
  
//得到最大值   
int GetMax(int nData[], int nLen)  
{  
    int nMax = nData[0];        //初始化nMax为第二个数据   
    for (int i = 1; i < nLen; ++i)    //遍历数据一一同nMax比较   
    {  
        if (nMax < nData[i])  
        {  
            nMax = nData[i];  
        }  
    }  
    return nMax;                //返回nMax   
}  
int main()  
{  
    int nData[10] = {8,2,5,9,3,6,4,7,1,6};    //测试   
    int nMax = GetMax(nData, 10);  
    int nMin = GetMin(nData, 10);  
    printf("%d %d/n", nMin, nMax);  
  
    GetMaxMin(nData, 10, &nMax, &nMin);  
    printf("%d %d/n", nMin, nMax);  
    system("pause");  
    return 0;  
}  
#include <stdio.h>
#include <stdlib.h>

//得到最大最小值
int GetMaxMin(int nData[], int nLen, int* pnMax, int* pnMin)
{
    int nMax = nData[0];            //初始化最大值为第一个元素
    int nMin = nData[0];            //初始化最小值为第一个元素
    int i;                            //下标控制i

    //遍历元素,两两比较
    for (i = 1; i + 1 < nLen; i += 2)
    {
        
        if (nData[i] > nData[i + 1])    //如果第一个数比第二个数大
        {
            if (nMax < nData[i])        //用第一个数与nMax比较
            {
                nMax = nData[i];
            }
            if (nMin > nData[i + 1])    //用第二个数与nMin比较。
            {
                nMin = nData[i + 1];
            }
        }
        else                            //如果第一个数不大于第二个数
        {
            if (nMax < nData[i + 1])    //用第二个数与nMax比较
            {
                nMax = nData[i + 1];
            }
            if (nMin > nData[i])        //用第一个数与nMin比较
            {
                nMin = nData[i];
            }
        }
    }

    if (i < nLen)                    //确定是否都比较了,如果nLen为偶,可能最后一个数没有比较
    {
        if (nMax < nData[i])        //比较最后一个数。
        {
            nMax = nData[i];
        }
        else if (nMin > nData[i])
        {
            nMin = nData[i];
        }
    }

    *pnMax = nMax;                    //保存结果
    *pnMin = nMin;                    //返回结果。

    return 1;
};

//得到最小值
int GetMin(int nData[], int nLen)
{

    int nMin = nData[0];        //初始化nMin为第一个数据
    for (int i = 1; i < nLen; ++i)    //遍历数据一一同nMin比较
    {
        if (nMin > nData[i])
        {
            nMin = nData[i];
        }
    }
    return nMin;                //返回最小值
}

//得到最大值
int GetMax(int nData[], int nLen)
{
    int nMax = nData[0];        //初始化nMax为第二个数据
    for (int i = 1; i < nLen; ++i)    //遍历数据一一同nMax比较
    {
        if (nMax < nData[i])
        {
            nMax = nData[i];
        }
    }
    return nMax;                //返回nMax
}
int main()
{
    int nData[10] = {8,2,5,9,3,6,4,7,1,6};    //测试
    int nMax = GetMax(nData, 10);
    int nMin = GetMin(nData, 10);
    printf("%d %d/n", nMin, nMax);

    GetMaxMin(nData, 10, &nMax, &nMin);
    printf("%d %d/n", nMin, nMax);
    system("pause");
    return 0;
} 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值