同時維護 max、min,一次循環完成,比較次數 2(n-1)。
#include <stdio.h>
int main(void) {
int a[10];
printf("請輸入 10 個整數: ");
for (int i = 0; i < 10; ++i) scanf("%d", &a[i]);
int max = a[0], min = a[0];
for (int i = 1; i < 10; ++i) {
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
}
printf("max = %d\nmin = %d\n", max, min);
return 0;
}
輸入: 1 2 3 56 23 6 767 32 11 567
輸出: max = 767
min = 1
void minmax_pairwise(const int a[], int n, int *min, int *max) {
*min = *max = a[0];
int i = (n % 2) ? 1 : 2;
if (n % 2 == 0) {
if (a[0] > a[1]) { *max = a[0]; *min = a[1]; }
else { *max = a[1]; *min = a[0]; }
}
for (; i < n; i += 2) {
int big = a[i] > a[i+1] ? a[i] : a[i+1];
int small = a[i] < a[i+1] ? a[i] : a[i+1];
if (big > *max) *max = big;
if (small < *min) *min = small;
}
}
比較次數降為 1.5n,適合極大數據量或嵌入式極致優化。