c言語を使用して数を二分法で検索する方法は何ですか?

以下は、C言語を使用して数値を二分探索する素敵な実装の例です。

#include <stdio.h>

int binarySearch(int arr[], int n, int target) {
    int left = 0;
    int right = n - 1;
    
    while (left <= right) {
        int mid = left + (right - left) / 2;
        
        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    
    return -1; // 返回-1表示未找到目标数
}

int main() {
    int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 10;
    
    int result = binarySearch(arr, n, target);
    
    if (result != -1) {
        printf("目标数 %d 找到在索引 %d\n", target, result);
    } else {
        printf("目标数 %d 未找到\n", target);
    }
    
    return 0;
}

binarySearch関数には、探している配列と目標の数値を渡すことができ、関数から返されるインデックス位置で目標の数値を見つけることができます。目標の数値が見つからない場合は、関数は-1を返します。上記の例では、目標の数値10は配列のインデックス3に見つかります。

bannerAds