算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数

来源:互联网 发布:篆刻印章软件 编辑:程序博客网 时间:2024/05/03 14:11

解题思路

n个大小的整数数组
思路1:遍历整个数组分别得出最大值和最小值,比较次数为2n
思路2:取两个数进行比较,大的与当前最大值比较,小的与当前最小值比较,则没两个数要比较3次,比较次数为1.5n

c++代码

//取两个数进行比较,小的数跟当前最小值比较,大的数跟当前最大值比较void GetMinMax(int* buffer,int& bufferLen,int& max, int& min){    if(buffer == NULL || bufferLen <= 0)    {        cout<<"buffer is empty or wrong"<<endl;        return;    }    int i = 0;    int j = bufferLen -1;    min = buffer[0];    max = buffer[0];    while(i <= j)    {        if(buffer[i] < buffer[j])        {            if(buffer[i] < min)            {                min = buffer[i];            }            if(buffer[j] > max)            {                max = buffer[j];            }        }        else        {            if(buffer[j] < min)            {                min = buffer[j];            }            if(buffer[i] > max)            {                max = buffer[i];            }        }        i++;        j--;    }}

测试代码

int _tmain(int argc, _TCHAR* argv[]){    int buffer[10] = {9,6,1,7,10,2,4,5,8,-1};    int bufferLength = 10;    int min = 0;    int max = 0;    GetMinMax(buffer,bufferLength,max,min);    cout<<"min = "<<min<<" max = "<<max<<endl;    return 0;}
0 0
原创粉丝点击