/*求一个数组中最大值和最小值,只用比较3n/2次,先是每一对比较一个最大值
和最小值,然后用最大值和原先的最大值比较,最小值和原先的最小值比较*/
#include<iostream>
using namespace std;
bool isEven(int v)//判断一个数是否为偶数
{
return (v & 1) ? false : true;
}
void maxAndmin(int arr[],int n,int &max,int &min)
{
if(isEven(n))//偶数的处理情况
{
if(arr[0] < arr[1])
{
min = arr[0];
max = arr[1];
}
else
{
min = arr[1];
max = arr[0];
}
for(int i = 2; i < n - 1; i = i + 2)
{
if(arr[i] > arr[i + 1])
{
if(arr[i] > max)
max = arr[i];
if(arr[i + 1] < min)
min = arr[i + 1];
}
else
{
if(arr[i] < min)
min = arr[i];
if(arr[i + 1] > max)
max = arr[i + 1];
}
}
}
else//奇数的处理情况
{
min = arr[0];
max = arr[0];
for(int i = 1; i < n - 1; ++i)
{
if(arr[i] > arr[i + 1])
{
if(arr[i] > max)
max = arr[i];
if(arr[i + 1] < min)
min = arr[i + 1];
}
else
{
if(arr[i] < min)
min = arr[i];
if(arr[i + 1] > max)
max = arr[i + 1];
}
}
}
}
int main(void)
{
int max = 0;
int min = 0;
int arr[10] = {2, 1, 6, 9, 10, 7, 11, 4, 5, 8};
maxAndmin(arr, 10, max, min);
cout<<max<<endl;
cout<<min<<endl;
system("pause");
return 0;
}
如果使用冒泡的思想的话,比较2n次可以找到一个最大值和一个最小值,但是我们可以把问题的比较次数降低到3n/2次比较次数上。
求数组中的最大数和最小数
最新推荐文章于 2020-02-20 19:35:25 发布