在介绍二分查找之前先讲下简单查找,简单查找顾名思义 一个一个查找,基于线性表的查找,时间复杂度为O(n),说到时间复杂度大O,即大O表示法,它指出了算法有多快。例如:假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O(n)。运行时间?单位秒么?并非,大O表示法指的并非以秒为单位的速,它让你能够比较操作数,它指出了算法运行时间的增速。大O表示法最直接的理解就是表示:算法需要执行的操作数。
//简单查找
//O(n)
function easySearch(a, c) {
if (!(a instanceof Array)) return "arr is not Array!";
for (var b = 0; b < a.length; b++) if (a[b] == c) return b;
return -1
}
//二分查找 binary search
//O(log n)
//有序数组 a
function binary(a, c) {
if (!(a instanceof Array)) return "arr is not Array!";
for (var b = 0, d = a.length - 1; b <= d;) {
var e = Math.floor((b + d) / 2),
f = a[e];
if (f == c) return e;
f < c ? b = e + 1 : d = e - 1
}
return -1
}