您的位置:首页 > 其它

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

2017-03-08 14:17 495 查看

解题思路

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法
相关文章推荐