📜  算法|搜寻|问题4

📅  最后修改于: 2021-06-29 04:40:55             🧑  作者: Mango

考虑下面的C程序,该程序尝试使用二进制搜索在数组Y []中定位元素x。该程序是错误的。 (GATE CS 2008)

1.   f(int Y[10], int x) {
2.     int i, j, k;
3.     i = 0; j = 9;
4.     do {
5.             k =  (i + j) /2;
6.             if( Y[k] < x)  i = k; else j = k;
7.         } while(Y[k] != x && i < j);
8.     if(Y[k] == x) printf ("x is in the array ") ;
9.     else printf (" x is not in the array ") ;
10. }

程序在Y和x的以下哪些内容上失败?
(A) Y为[1 2 3 4 5 6 7 8 9 10]并且x <10
(B) Y为[1 3 5 7 9 11 13 15 17 19]并且x <1
(C) Y为[2 2 2 2 2 2 2 2 2 2 2]并且x> 2
(D) Y为[2 4 6 8 10 12 14 16 18 20]并且2 答案: (C)
说明:对于要搜索的元素是Y []的最后一个元素或大于Y []的最后一个元素(或最大元素)的情况,上述程序不起作用。在这种情况下,程序会陷入无限循环,因为在所有迭代中都将i赋值为k,并且i永远不会等于或大于j。因此,条件永远不会变为假。
这个问题的测验