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

C語言基礎算法實戰:極值查找、二維數組篩選與二分查找

     編輯:關於C

題目一:5 個數求極值及下標

思路:單次遍歷,維護 max/min 及對應下標 max_idx/min_idx。

#include <stdio.h>

int main(void) {
    int a[5], i, max, min, max_idx = 0, min_idx = 0;
    printf("輸入 5 個整數: ");
    for (i = 0; i < 5; i++) scanf("%d", &a[i]);

    max = min = a[0];
    for (i = 1; i < 5; i++) {
        if (a[i] > max) { max = a[i]; max_idx = i; }
        if (a[i] < min) { min = a[i]; min_idx = i; }
    }
    printf("最大值 %d 下標 %d | 最小值 %d 下標 %d\n", max, max_idx, min, min_idx);
    return 0;
}

題目二:4×4 二維數組篩選偶行偶列

注意:C 語言下標從 0 開始,「偶數行/列」對應下標 0、2(即第 1、3 行/列)。

#include <stdio.h>

int main(void) {
    int a[4][4], i, j;
    printf("輸入 16 個整數: ");
    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++)
            scanf("%d", &a[i][j]);

    printf("偶行偶列元素: ");
    for (i = 0; i < 4; i += 2)      // 步長 2 直接跳過奇行
        for (j = 0; j < 4; j += 2)
            printf("%d ", a[i][j]);
    putchar('\n');
    return 0;
}

題目三:有序數組二分查找

前提:數組已升序排列。時間複雜度 O(log n)。

#include <stdio.h>
#define N 10

int main(void) {
    int a[N] = {-1, 6, 8, 10, 15, 20, 21, 25, 29, 55};
    int target, low = 0, high = N - 1, mid, found = 0;

    printf("輸入查找值: ");
    scanf("%d", &target);

    while (low <= high) {
        mid = (low + high) / 2;
        if (target == a[mid]) { found = 1; break; }
        else if (target < a[mid]) high = mid - 1;
        else low = mid + 1;
    }

    if (found) printf("找到 %d,下標 %d\n", target, mid);
    else printf("不存在 %d\n", target);
    return 0;
}

核心算法模式總結

問題模式關鍵點
極值/統計單遍歷累積器初始化用首元素,同時記錄下標
二維篩選雙重迴圈 + 步長/條件下標從 0 起,「偶」對應 0,2,4…
有序查找二分收斂low <= high、mid = (low+high)/2、三向分支

進階提示

  • 二分查找避免溢出:mid = low + (high - low) / 2。
  • C++ std::lower_bound/upper_bound 封裝了邊界細節,生產代碼優先用標準庫。
  • 若數組頻繁插入/刪除,考慮平衡樹或跳表而非數組。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved