理解js中使用二分法

首先说明一个前提,再用二分法进行查找时,查找对象的数组必须是有序的,当你拿到一个数组之后,你可以先进行排序,然后再利用二分查找
首先举一个简单的例子,让你猜一下100以内的一个正整数N,怎么快速的guess出来呢,首先先猜是不是50?如果猜大了,就往小的方面去guess,可以猜25…,如果猜小了,可以往大了方向guess,可以猜75,就这样一步一步的接近正确的答案
来看第一个例子

while循环
function indexOf(arr,target,start,end){
	 start = start || 0;
	 end = end || arr.length - 1;
	 let mid = Math.floor((start + end)/2);
	 console.log(start,end);
	 while(start <= end){
	 	console.log(start,end,target,arr[mid]);
	 	if(target > arr[mid]){
	 		start = mid + 1;
	 		mid = Math.floor((start + end)/2);
	 	}
	 	else if(target < arr[mid]){
	 		end = mid - 1;
	 		mid = Math.floor((start + end)/2);
	 	}
	 	else {
	 		return mid ;
	 	}
	 }
	 console.log(start,end);
	 return -1;
}
let a = [0,1,2,3,4,5,6,383,565];
console.log(indexOf(a,5));     //打印结果为5
第一步
声明开始的值和结束的值,分别是0和数组长度-1
第二步
声明中间值mid=(start+end)/2并取整数
第三步
用while循环
如果我们要找的这个target>arr[mid],那说明target只可能在mid+1~end之间,
意思就是猜小了,要往大的方向猜
如果我们要找的这个target<arr[mid],那说明target只可能在start~mid-1之间
,意思就猜大了,得往小的方向猜
如果我们要找的这个target==arr[mid],那恭喜你,猜对了

在用二分法进行查找时,查找对象的数组必须是有序的,即各数组元素的次序是按其值的大小顺序存储的。其基本思想是先确定待查数据的范围(可用 [left,right] 区间表示),然后逐步缩小范围直到找到或找不到该记录为止。二分法可以用递归或者循环的方式实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值