设计一个最优算法来查找一个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; }