- 顺序搜索 ?
顺序搜索:顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。
// 顺序查找
var sequentialSearch = function(arr, item) {
for (var i = 0; i < arr.length; i++) {
if (item === arr[i]) {
return i;
}
}
return -1;
}
- 二分搜索 ?
二分搜索:这个算法要求被 搜索的数据结构已排序。
算法步骤 :
- 选择数组的 中间值 。
- 如果 选中值是待搜索值,那么算法执行完毕(值找到了)。
- 如果 待搜索值比选中值要小,则返回步骤 1 并在选中值 左边 的子数组中寻找 。
- 如果 待搜索值比选中值要大,则返回步骤 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;
}