今回は、2分探索法のプログラムを示します(リスト2)。このプログラムは、main関数で静的な配列arrayを定義し、binary_search関数に、検索する配列(array)、検索する数値(target)、配列の要素数(index_size)を入力すると、検索する数値が何番目の配列に入っているか出力するものです。
このプログラムのバグを見つけてください(バグは1つだけではありません)。なお、本問題の制限事項は、以下の通りです。
数分見ても分からない場合、デバッガを使って、チャレンジしてみてください。
#include <stdio.h> int binary_search(int array[], int target, int index_size){ // low: 下限, high: 上限, mid: 中央値 int low = 0, high = index_size - 1, mid = 0; while (1) { mid = low + ( (high - low) / 2); if (array[mid] == target) { return mid; } else if (array[mid] > target){ high = mid + 1; } else { low = mid - 1; } } return -1; } int main(void) { //入力する配列array int array[] = {7, 3, 5, 20, 1, 12, 15, 16, 4}; int index_size = 0; //配列の要素数 int target; //検索する数値 int result = 0; //場所 index_size = sizeof(array) / sizeof(array[0]); printf("検索する値を入力してください\n"); scanf("%d",&target); result = binary_search(array, target, index_size); if (result == -1){ printf("%dはありません.\n", target); } else { printf("場所は%d番目です.\n", result); } return 0;
Copyright © ITmedia, Inc. All Rights Reserved.