JavaScript实现二分查找的两种实现

二分查找的实现

对于数量很小的数据来说,我们一眼便可以找到我们所需要查找的那个数。在日常生活中,很多地方都会用到查找。比如说一个通讯录列表,如果列表里面的数量极少,我们很快就可以找到。但是试想一下,有几万个电话,我们怎么能在短时间内找到我们想要的数据呢?这个时候我们就需要对我们 的数据做一些处理,比如说分类,按照首字母、升序、降序等等,然后按照规则对应的去查找,这样就可以更快的搜索到我们想要的数据。

在计算机中,我们比较容易实现,理解的便是顺序查找。也就是说一个一个挨着比对,直到找到我们数据为止。而现在正是大数据时代,在那么多数据中去查找,恐怕查找的时间会很长,很显然不符合业务需求。在这里笔者就介绍一种经典的查找算法,二分法。二分法的规则是,将一组待查找数据按照一个特定的 序列进行排列,然后每次取出中间值跟我们的待查值比较。如果正好等于它,查找完毕。如果比待查值小,那么待查值就查找后半部分。因为前半部分都比待查值小,所以不需要查找了。然后重复这个过程,直到中间值正好等于待查值,如果数组的最低位比最高位大,则说明这个序列中未查找到元素,直接退出查找。

代码实现:
//迭代实现
function binarySearch(arr, key) {
	//首先定义两个变量,获取到当前数组的最小值,以及最大值
	var low = 0,
		high = arr.length - 1,
		mid;
		//开始循环,条件是最小值比最大值小或者等于
	while (low <= high) {
		//找到数组的中间值
		mid = Math.floor((low + high) / 2);
		//开始作比较
		if (key == arr[mid]) {
			return mid;
		} else if (key < arr[mid]) {
			high = mid - 1;
		} else {
			low = mid + 1;
		}
	}
	return -1;
}
// 递归实现
function binary_search(arr, low, high, key) {
	if (low > high) {
		return -1;
	}
	var mid = parseInt((high + low) / 2);
	if (arr[mid] == key) {
		return mid;
	} else if (arr[mid] > key) {
		return binary_search(arr, low, mid - 1, key);
	} else if (arr[mid] < key) {
		return binary_search(arr, mid + 1, high, key);
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值