随感而发

杂七杂八

统计

留言簿(13)

阅读排行榜

评论排行榜

求最大最小值

今天学习了求最大最小数,这是一个很简单的算法,就是遍历一次,然后依次跟当前最大或最小的比较一下,遍历结束,则选择结束。
不过同时求最大最小的时候有点小技巧,就是我们两个两个的比较,把大个跟当前最大比较,小的跟当前最小的比较,这样就会节约一点比较时间,有原来的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;
}

posted on 2009-04-27 19:28 shongbee2 阅读(1228) 评论(0)  编辑 收藏 引用 所属分类: 数据结构和算法


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理