二分探索アルゴリズムをC言語で実装するには?
二分法検索アルゴリズムは、事前にソートされた配列上で、目的の要素を効率的に検索できるアルゴリズムです。以下は C 言語による二分法検索アルゴリズムの実装例です。
#include <stdio.h>
// 二分法查找算法
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
// 找到目标值
if (arr[mid] == target) {
return mid;
}
// 目标值在右半边
if (arr[mid] < target) {
left = mid + 1;
}
// 目标值在左半边
else {
right = mid - 1;
}
}
// 没有找到目标值
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int target = 6;
int n = sizeof(arr) / sizeof(arr[0]);
int result = binarySearch(arr, 0, n - 1, target);
if (result == -1) {
printf("目标值 %d 不存在数组中。\n", target);
} else {
printf("目标值 %d 在数组中的索引为 %d。\n", target, result);
}
return 0;
}
上記のコードでは、binarySearch関数が二分探索アルゴリズムを実装しています。引数leftとrightを渡すことにより、現在の探索範囲の左端と右端が決定され、中間位置midを計算することで探索する値が左半分にあるのか右半分にあるのかを決定します。探索対象が見つかった場合には、そのインデックスが返され、見つからない場合には-1が返されます。
main メソッド内でソート済み配列 arr とターゲット値 target を定義し、binarySearch 関数を呼び出してターゲット値のインデックスを配列内から検索し、結果に応じて出力を表示します。