最大值-最小值

来源:互联网 发布:交换机 mac 编辑:程序博客网 时间:2024/06/04 18:56
 

求最大最小的时候有点小技巧,就是我们两个两个的比较,把大个跟当前最大比较,小的跟当前最小的比较,这样就会节约一点比较时间,有原来的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;}