$顺序搜索
将每一个数据结构中的元素和我们要找的元素作比较。 顺序搜索是最低效的一种搜索算法。 我们这里用数组来举例:
function seqSearch (arr, item) {
var $arr = arr || [];
var $len = $arr.length;
for (var i = 0; i < len; i++) {
if (item === $arr[i]) {
return i;
}
}
return -1;
}
二分搜索
前提: 被搜索的数据结构已排序。 下面,我们先说说该算法的步骤:
- 选择数组的中间值。
- 如果选中是待搜索值,那么算法执行完毕。
- 如果待搜索值小于选中值,则返回步骤1在选中值左边的子数组中寻找。
- 如果待搜索值大于选中值,则返回步骤1在选中值右边的子数组中寻找。 说简单点,就是一直二分,判断中间值和待搜索值的大小,直到找到和待搜索值相等项。 下面是实现:
function binSearch (arr, item) {
var $arr = arr.sort(function (a, b) {
return a - b;
});
var $low = 0;
var $high = $arr.length - 1;
var mid = null;
var ele = null;
while (low <= high) {
mid = Math.floor(($low + $high) / 2);
ele = $arr[mid];
if (ele < item) {
$low = mid + 1;
}else if (ele > item) {
$high = mid - 1;
}else {
return mid;
}
}
return -1;
}