首页 新闻 会员 周边 捐助

二分查找问题

0
[已解决问题] 解决于 2016-04-07 23:46

int search(int a[], int low, int high, int x) {

int middle;

while (low <= high) {

 middle = (low + high) / 2;

if (x<a[middle]) {

search(a, low, middle - 1, x);//要将这里改成high=middle-1;search(a,low,high,x);

}

if(x>a[middle])

{

search(a, middle + 1, high, x);//要将这里改成low=middle+1;search(a,low,high,x);

}

if(x==a[middle])

return middle;

}

return middle;

}

上面的原代码改动了才对,请教不改是哪里的问题??

小同1的主页 小同1 | 菜鸟二级 | 园豆:202
提问于:2016-04-06 17:42
< >
分享
最佳答案
1

了解一下递归的机制吧

不修改high或low的值的话,等到返回该层时,low还是小于high

奖励园豆:5
RunningSnail | 初学一级 |园豆:193 | 2016-04-07 18:11

懂了,是这样的

小同1 | 园豆:202 (菜鸟二级) | 2016-04-07 23:44
其他回答(1)
0

调试一下,没觉得哪里不对

不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2016-04-07 15:38

因为我的用原码不能出结果,改了之后才可以,请问你用未改动的代码可以运行么

支持(0) 反对(0) 小同1 | 园豆:202 (菜鸟二级) | 2016-04-07 16:02

@小同1: 可以啊,没觉得哪里不对,你调试一下试试

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2016-04-07 16:03

@不知道风往哪儿吹: 我试了一下,但是编译通过的,发现还是不能查找,输入要查找的数就没有结果了

支持(0) 反对(0) 小同1 | 园豆:202 (菜鸟二级) | 2016-04-07 17:37

@小同1:  

      

 1             int middle;
 2 
 3             while (low <= high)
 4             {
 5 
 6                 middle = (low + high) / 2;
 7 
 8                 if (x < a[middle])
 9                 {
10 
11                     return search(a, low, middle - 1, x);
12                   //要将这里改成high=middle-1;search(a,low,high,x);
13 
14                 }
15 
16                 if (x > a[middle])
17                 {
18 
19                     return search(a, middle + 1, high, x);
20                     //要将这里改成low=middle+1;search(a,low,high,x);
21 
22                 }
23 
24                 if (x == a[middle])
25                 {
26                     return a[middle];
27                 }
28             }
29             return 0;

 

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2016-04-07 18:22

@不知道风往哪儿吹: 我觉得确实是不对的,楼下那种说法有道理的

支持(0) 反对(0) 小同1 | 园豆:202 (菜鸟二级) | 2016-04-07 23:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册