经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
第十三章 搜索算法
来源:cnblogs  作者:人生之外的路途  时间:2020/12/28 9:51:06  对本文有异议

二分搜索

二分搜索是应用在已排序的数组中的搜索算法,其在搜索算法中的高效体现在其一次排除元数据的一半元素【也正因为要排除一半的元素,所以这个算法是在排序的数组中搜索】

  • 左指针:指向数组的起始位置,或者你认为的起始搜索的部分
  • 右指针:指向数组的终止位置,或者你认为的终止搜索部分
  • 终止条件:当左指针大于或者等于右指针的时候就结束了
  • 找这两个指针的中间的数middle,与目标target比较
    • middle > target:说明目标在其左侧,那么就将右指针移动到middle - 1位置(注意,这里middle已经比较过了)
    • middle < target:说明目标在其右侧,那么就将左指针移动到middle + 1位置(注意,这里middle也已经比较过了)
    • middler === target:说明这个就是目标,那么就返回位置
    • 最后没找到就返回-1
  1. function defaultCompareFunction<T>(a: T, b: T){
  2. if(a === b){
  3. return Compare.EQUAL
  4. }
  5. return a > b ? Compare.GREATER : Compare.LESS;
  6. }
  7. export enum Compare {
  8. LESS = -1,
  9. EQUAL = 0,
  10. GREATER = 1
  11. }
  12. function binarySearch<T>(arr:Array<T>, target: T , compareFn: Function = defaultCompareFunction){
  13. let left = 0, // 左指针
  14. right = arr.length - 1; // 右指针
  15. // 循环结束条件
  16. while(left <= right){
  17. // 中间数
  18. let middle = Math.floor((left + right) / 2);
  19. if(compareFn(arr[middle], target) === Compare.EQUAL){
  20. // 如果相等的话
  21. return middle;
  22. } else if(compareFn(arr[middle], target) === Compare.LESS) {
  23. left = middle + 1;
  24. } else {
  25. right = middle - 1;
  26. }
  27. }
  28. return -1;
  29. }
  30. let index = binarySearch([0,1,2,3,4,5,6,7,8,9,10,12,45], 8);
  31. console.log(index)

原文链接:http://www.cnblogs.com/wangzhaoyv/p/14199592.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号