#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 8
// 2n-2次比较
void GetMinMax(int *arr, int n, int *min, int *max)
{
*min = *max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < *min)
*min = arr[i];
if (arr[i] > *max)
*max = arr[i];
}
}
// 3n/2次比较
void GetMinMax2(int *arr, int n, int *min, int *max)
{
if (n % 2 == 1) { // 含有奇数个元素的情况
*min = *max = arr[0];
for (int i = 1; i < n; i += 2) {
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];
}
}
} else { // n % 2 == 0 // 含有偶数个元素的情况
if (arr[0] < arr[1]) { // 3n/2-2次比较
*min = arr[0];
*max = arr[1];
} else {
*min = arr[1];
*max = arr[0];
}
for (int i = 2; i < n; i += 2) {
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 arr[BUFSIZE] = {23, 2, 34, 20, 3, 234, 76, 90};
int len = sizeof(arr) / sizeof(arr[0]);
int min, max;
GetMinMax(arr, len, &min, &max);
printf("min = %d, max = %d\n", min, max);
GetMinMax2(arr, len, &min, &max);
printf("min = %d, max = %d\n", min, max);
system("pause");
return 0;
}
最大值与最小值
最新推荐文章于 2024-04-02 21:48:08 发布