ソートされた配列のバイナリ検索を実装するために、次のプログラムを作成しました。
int flag=0;
void binarysearch(int x, int a[], int m, int n)
{
int middle=(m+n)/2;
if(a[middle]==x)
{
printf("%d has been found at postion %d!\n", x, middle+1);
flag=1;
}
else
if(x > a[middle])
binarysearch(x, a, middle, n);
else
if(x < a[middle])
binarysearch(x, a, m, middle);
}
main()
{
int i, size, x;
int a[100];
printf("Enter the size of the list : ");
scanf("%d", &size);
printf("Enter the list items in ascending order : \n");
for (i=0; i<size; i++)
scanf("%d", &a[i]);
printf("Enter the element to be found : ");
scanf("%d", &x);
binarysearch(x, a, 0, size-1);
if(flag != 1)
printf("%d has not been found in the list!", x);
}
このプログラムの問題はbinarysearch
、リストにないアイテムを検索しようとすると、関数が繰り返し自分自身を呼び出すことです。したがって、flag
変数は完全に無意味になります。
プログラムがユーザーに(配列にないものの)そのような検索を実行しようとしているかどうかを通知できる可能性はありますか?
二分探索アルゴリズムの基本的な欠陥であるため、それは不可能だと思います。教えてください。