JS 搜索算法,递归

  • 顺序搜索 ?

顺序搜索:顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法

// 顺序查找
var sequentialSearch = function(arr, item) {
    for (var i = 0; i < arr.length; i++) {
	    if (item === arr[i]) {
		    return i;
	    }
    }
    return -1;
}
  • 二分搜索 ?

二分搜索:这个算法要求被 搜索的数据结构已排序

算法步骤 :

  1. 选择数组的 中间值
  2. 如果 选中值是待搜索值,那么算法执行完毕(值找到了)。
  3. 如果 待搜索值比选中值要小,则返回步骤 1 并在选中值 左边 的子数组中寻找 。
  4. 如果 待搜索值比选中值要大,则返回步骤 1 并在选种值 右边 的子数组中寻找 。
// 二分查找
var binarySearch = function(newArr, item) {
	var low = mid = element = 0;
	var high = newArr.length - 1;
	while (low <= high) {
		mid = Math.floor((low + high) / 2);
		element = newArr[mid];
		if (element < item) {
			low = mid + 1;
		} else if (element > item) {
			high = mid - 1;
		} else {
			return mid;
		}
	}
	return -1;
}
  • 代码测试 ?
var arr = [45, 67, 43, 21, 56, 86, 42, 32];
var newArr = arr.sort(function(a, b) {
	return a - b;
});
console.log(sequentialSearch(newArr, 45)); // 4
console.log(binarySearch(newArr, 45)); // 4
  • 递归 ?

递归:是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题。通常涉及函数调用自身。每个递归函数都必须要有边界条件,即一个不再递归调用的条件(停止点),以防止无限递归 。JS调用栈大小的限制。如果忘记加上用以停止函数递归调用的边界条件,递归并不会无限执行下去;浏览器会抛出错误,也就是所谓的栈溢出错误。

  • 递归实例 _ 斐波那契数列 ?

斐波那契数列:(递归和非递归方法实现)递归更容易理解,并且它所需的代码量更少

// 递归实现,斐波那契数列
function fibonacci(num){
	if(num === 1 || num === 2){
		return 1;
	}
	return fibonacci(num - 1) + fibonacci(num - 2);
}

// 非递归实现,斐波那契数列
function fibonacci1(num){
	var n1 = n2 = n = 1;
	for(var i=3; i<num; i++){
		n = n1 + n2;
		n1 = n2;
		n2 = n;
	}
	return n;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值