设计一个最优算法来查找一个n个元素数组中的最大值和最小值。一直一种需要比较2n次的方法,请给出一个更优的算法。请特别注意优化时间复杂度的常数。
void fun(int a[], int n)
{
if (a == NULL)
{
return;
}
int max = a[0];
int min = a[0];
int len = (n&1)? n : n-1;
int tempMax, tempMin;
for(int i = 1; i < len; i += 2)
{
if (a[i] > a[i+1])
{
tempMax = a[i];
tempMin = a[i+1];
}
else
{
tempMax = a[i+1];
tempMin = a[i];
}
if (tempMax > max)
{
max = tempMax;
}
if (tempMin < min)
{
min = tempMin;
}
}
if (n != len)
{
if (a[n-1] > max)
{
max = a[n-1];
}
if (a[n-1] < min)
{
min = a[n-1];
}
}
cout << "Min num is " << min << endl;
cout << "Max num is " << max << endl;
}