首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言求 10 個整數最大值最小值:單遍歷雙變量更新

     編輯:關於C

最優單遍歷算法

同時維護 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,適合極大數據量或嵌入式極致優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved