搜索算法:顺序搜索和二分搜索

1,321 阅读1分钟

$顺序搜索

将每一个数据结构中的元素和我们要找的元素作比较。 顺序搜索是最低效的一种搜索算法。 我们这里用数组来举例:

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. 选择数组的中间值。
  2. 如果选中是待搜索值,那么算法执行完毕。
  3. 如果待搜索值小于选中值,则返回步骤1在选中值左边的子数组中寻找。
  4. 如果待搜索值大于选中值,则返回步骤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;
}