算法导论-最大值最小值问题
在一个给定的数组中,找最大值最小值,如果分别独立地找出最大、最小值,这各需要n-1次比较,共需2n-1次比较。
如果先将数组中地一堆输入元素进行比较,最后较小的与当前最小值比较,较大的和最大值进行比较,这样每两个元素共需3次比较。
例如:最大值、最小值为min、max,当前下标为i;
最大值、最小值分别与arr[i]单独比较:需要比较两次;再分别与arr[i+1]比较,又需要两次,一共四次;
如果arr[i]与arr[i+1]先比较(比较一次),然后min和arr[i]与arr[i+1]中的小值比较(比较一次),max和arr[i]与arr[i+1]中的大值比较(比较一次),从共需要比较三次。
#include<iostream>
using namespace std;
void GetMaxAndMinNum(int arr[], int len, int &min, int &max) {
int i = 0;
if (len % 2 == 0) {
if (arr[0] > arr[1]) {
max = arr[0];
min = arr[1];
}
else {
max = arr[1];
min = arr[0];
}
i = 2;
}
else {
max = min = arr[0];
i = 1;
}
for (; i < len - 1; i++) {
if (arr[i] < arr[i + 1]) {
if (arr[i] < min)min = arr[i];
if (arr[i + 1] > max) max = arr[i + 1];
}
else {
if (arr[i + 1] < min)min = arr[i + 1];
if (arr[i] > max) max = arr[i];
}
}
}
int main()
{
int min, max;
int arr[10] = { 2,6,4,7,9,1,3,5,8,2 };
GetMaxAndMinNum(arr, 10, min, max);
cout << min << " " << max;
system("Pause");
return 0;
}
for (; i < len - 1; i++) {
if (arr[i] < arr[i + 1]) {
if (arr[i] < min)min = arr[i];
if (arr[i + 1] > max) max = arr[i + 1];
}
else {
if (arr[i + 1] < min)min = arr[i + 1];
if (arr[i] > max) max = arr[i];
}
}
}