j**ascript中二分查找这里怎么理解?

时间:2014.08.10 发布人:ing**pxnm

j**ascript中二分查找这里怎么理解?

已解决问题

谷歌ing**pxnm用户在2014.08.10提交了关于“顾城j**ascript中二分查找这里怎么理解?”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-10-24T10:17:52。<scriptlanguage=j**ascript>vararr=[0,1,2,3,4,5,6,7,8,9];functionbinarySearch(arr,findVal,leftIndex,rightIndex){if(leftIndex>rightIndex){document.writeln("没找到");return;}//找到中间这个值varmidIndex=Math.floor((leftIndex+rightIndex)/2);//第一处varmidVal=arr[midIndex];//比较:if(midVal>findVal){//在左边找binarySearch(arr,findVal,leftIndex,midIndex-1);//第二处}elseif(midVal<findVal){//在右边找binarySearch(arr,findVal,midIndex+1,rightIndex);}else{document.writeln("找到下标为:"+midIndex);return;}}//测试binarySearch(arr,9,0,arr.length-1);</script>视频教程上老师写的二分查找代码我刚学JS不久,学到这里看的不明白了.不明白的地方我标的有第一处和第二处(当然后边还有,我想解决了这二处后后面的也应该明白了)第一处:leftIndex(左下标)是不是相当于arr[0]也就是0---?rightIndex右下标是不是相当于arr[9],也就是9---?然后这一行整体意思是:取返回小于(0+9)/2的最大整数4---?第二处:leftIndex和minIndex-1这里leftIndex=arr[0]?minIndex-1=arr[4]-1相当于4-1=3对吗?如果是这样,那这个3在这行里是什么意思啊?哪位帮我好好解释下啊手机上的.打了一个小时了,请详解下.谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!希望大家能够帮助她。

详细问题描述及疑问:<scriptlanguage=j**ascript>vararr=[0,1,2,3,4,5,6,7,8,9];functionbinarySearch(arr,findVal,leftIndex,rightIndex){if(leftIndex>rightIndex){document.writeln("没找到");return;}//找到中间这个值varmidIndex=Math.floor((leftIndex+rightIndex)/2);//第一处varmidVal=arr[midIndex];//比较:if(midVal>findVal){//在左边找binarySearch(arr,findVal,leftIndex,midIndex-1);//第二处}elseif(midVal<findVal){//在右边找binarySearch(arr,findVal,midIndex+1,rightIndex);}else{document.writeln("找到下标为:"+midIndex);return;}}//测试binarySearch(arr,9,0,arr.length-1);</script>视频教程上老师写的二分查找代码我刚学JS不久,学到这里看的不明白了.不明白的地方我标的有第一处和第二处(当然后边还有,我想解决了这二处后后面的也应该明白了)第一处:leftIndex(左下标)是不是相当于arr[0]也就是0---?rightIndex右下标是不是相当于arr[9],也就是9---?然后这一行整体意思是:取返回小于(0+9)/2的最大整数4---?第二处:leftIndex和minIndex-1这里leftIndex=arr[0]?minIndex-1=arr[4]-1相当于4-1=3对吗?如果是这样,那这个3在这行里是什么意思啊?哪位帮我好好解释下啊手机上的.打了一个小时了,请详解下.谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!期待您的答案,你就是当代的活雷锋,太感谢了 !

希望以下的回答,能够帮助你。

第1个回答

用户名:bt166381  

第一处疑问:
不能划上等号,你指出的情况仅仅符合二分法第一次运算,也就是binarySearch的第一次调用;
如果第一次匹配失败,那么二分法或选取匹配值可能所在的一报方法是通过匹配值与中间值之间的对比),这营具普个时候,调用的参数就不能这么解释了;这个过程就是一楼所势行项攻松苦亮卷帝许格说的递归
第二处疑问:
首先,老师给出的是一个特殊的数组(从0开始的差为1的等差数列),所以里面的一等权静器在些参数设置也可以通过这个数列约友复的特殊序列号获取
其实结合二分法原理整个函数的参数解释是:
arr:二分法作用的数组(搜索对象)每次递归都会改变
findVal:匹配值不变
leftInde法合握农听课哪十x:搜索对象(新的arr)的下限(最小值)每次递归都可能会改变可以省略此参数
rightIndex:搜索对象(新的arr)的上熄最大值)每次递归都可能会改变可以省略此参数
当然,这个参数的解释和你给的函数是冲突的,原因就在于老师给的是一个特殊的0开始公差为1的等差数列数组,所以函数中arr参数不改变,通过改变leftIndex和rightIndex来约束arr(变相重构了arr数列)


希望我的回答能慰问你那1个小时