本文阐述了JavaScript二分搜索法算法的原理和实现。分享给大家参考,如下:
一、问题描述:
在升序数组中,使用二分搜索法获得要查询的值的索引位置。例如:
var a=[1,2,3,4,5,6,7,8,9];搜索(a,3);//返回2search(a,1);//左边界,返回0search(a,9);//右边界,返回8search(a,0);//小于最小值,返回‘你要找的值不存在’搜索(a,10);//大于最大值,并返回“您要查找的值不存在”。注意:二分搜索法在有序数组中必须有效,无序数组不能实现搜索功能。比如在[10,5,6,7,8,9,20]中找10,中间索引位置的值是7,对比显示7小于10,应该在右边的子数组中找,但实际上是不可能找到10的;
第二,我的认识
函数搜索(arr,num){ var l=arr . length;var left=0;var right=l-1;var center=Math.floor((左/右)/2);while(left=l-1 right=0){ if(arr[center]==num)返回中心;如果(left==right)返回“您要查找的号码不存在”;if(arr[center]num){ right=center-1;center=Math.floor((左/右)/2);} else if(arr[center]num){ left=center 1;center=Math.floor((左/右)/2);} }}var a=[1,2,3,4,5,6,7,8,9];console.log(搜索(a,-2));描述:
1、基本思路:
每次比较,如果数组中间索引位置的值大于要搜索的值,则在数组中间位置之前的子数组中搜索;相反,如果数组中间索引位置的值大于要搜索的值,则在数组中间位置之后的子数组中搜索;如果数组中间索引位置的值正好等于要搜索的值,则返回索引位置。
2.左定义搜索范围的开始位置,右定义搜索范围的结束位置,中心定义搜索范围的中间位置。
3.while中的逻辑描述:
(1)因为不知道搜索了多少次,趁着是更好的选择;
(2)循环结束条件:
a、一旦右边小于0,就不再搜索,再纠缠就没有结果了。例如,在a=[1,2,3,4,5,6,7,8,9]中查找0。当搜索范围变为left=0,right=0,center=0时,输入while语句,并执行arr[center]0。
右=中心-1;center=Math.floor((左/右)/2);得到right=-1,那么就不应该再进入循环;
b、一旦当leftl-1,就不再搜索,再纠缠就没有结果了。例如,在a=[1,2,3,4,5,6,7,8,9]中寻找10。当搜索范围变为left=8,right=8,center=8时,输入while语句,并执行arr[center]10。
左=中心;center=Math.floor((左/右)/2);Get left=9,此时不应再进入循环;
4.始终匹配通过中心找到的值;
5.Math.floor处理搜索范围长度为偶数的情况;
6.当left==right,arr[center]==num未执行时,可以断定找不到;
7.当arr[center]==num时,整个功能就完成了,下面的语句就不执行了。
以上代码使用了在线HTML/CSS/JavaScript代码运行工具,http://tools.jb51.net/code/HtmlJsRun测试结果如下:
更多对JavaScript相关内容感兴趣的读者可以查看本网站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》和0103010
希望本文对JavaScript编程有所帮助。