顺序搜索
顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。
以下是其实现:
// 定义顺序搜索函数
this.sequentialSearch = function(item){
// 遍历整个数组
for (var i=0; i < array.length; i++){
// 如果数组中的当前元素与搜索的项相同
if (item === array[i])
return i; // 返回元素的索引
}
return -1; // 如果未找到则返回-1
};
顺序搜索迭代整个数组,并将每个数组元素和搜索项作比较。如果搜索到了,算法将用返回值来标示搜索成功。
二分搜索
二分搜索算法的原理和猜数字游戏类似,就是那个有人说“我正想着一个1到100的数字”的游戏。我们每回应一个数字,那个人就会说这个数字是高了、低了还是对了。
这个算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。
(1) 选择数组的中间值。
(2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。
(3) 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找。
(4) 如果待搜索值比选中值要大,则返回步骤1并在选种值右边的子数组中寻找。
以下是其实现:
// 定义二分搜索函数
this.binarySearch = function(item){
this.quickSort(); // 开始前先对数组进行排序
var low = 0, // 定义低指针
high = array.length - 1, // 定义高指针
mid, element;
// 当低指针小于等于高指针时,执行循环
while (low <= high){
mid = Math.floor((low + high) / 2); // 计算中间索引
element = array[mid]; // 获取中间元素的值
if (element < item) { // 如果中间元素的值小于搜索的值
low = mid + 1; // 更新低指针
} else if (element > item) { // 如果中间元素的值大于搜索的值
high = mid - 1; // 更新高指针
} else {
return mid; // 返回中间元素的索引
}
}
return -1; // 如果未找到则返回-1
};