1. 顺序搜索
顺序搜索(Sequential Search),也称线性搜索,是一种简单直接的搜索算法。它遍历整个序列,查找目标元素是否与序列中的元素相等,如果相等则返回该元素在序列中的位置,否则返回未找到。
下面是一份使用 JavaScript 实现的顺序搜索算法示例:
function sequentialSearch(array, item) {
for (var i = 0; i < array.length; i++) {
if (array[i] === item) {
return i; // 找到目标元素,返回所在位置
}
}
return -1; // 未找到目标元素,返回 -1
}
此处的 `array` 表示要搜索的数组,`item` 表示要查找的目标元素。算法通过遍历整个数组,逐个判断数组中的元素是否与目标元素相等,如果找到了相等的元素,则返回它在数组中的位置;否则,返回 -1,表示未找到目标元素。
顺序搜索算法的时间复杂度为 O(n),n 为数组的长度,因为在最坏情况下需要遍历整个数组。顺序搜索算法的优点是简单、易于实现,缺点是效率较低,不适用于大规模数据的查找。如果需要在大规模数据中进行查找操作,可以使用更高效的搜索算法,例如二分搜索。
2. 二分搜索
二分搜索(Binary Search),也称折半搜索,是一种高效的搜索算法,适用于有序数组的查找。它通过不断缩小查找的范围,将查询时间从O(n)降低到O(log n)。
下面是一份使用 JavaScript 实现的二分搜索算法示例:
function binarySearch(array, item) {
var low = 0,
high = array.length - 1,
mid, guess;
while (low <= high) {
mid = Math.floor((low + high) / 2);
guess = array[mid];
if (guess === item) {
return mid; // 找到目标元素,返回所在位置
} else if (guess > item) {
high = mid - 1; // 查找左侧部分
} else {
low = mid + 1; // 查找右侧部分
}
}
return -1; // 未找到目标元素,返回 -1
}
此处的 `array` 表示要查找的数组,`item` 表示要查找的目标元素。算法首先定义三个变量 `low`、`high` 和 `mid`,用于表示当前查找范围的左、右、中三个位置,`guess` 变量表示中间位置的元素值。然后,算法使用 `while` 循环来执行查找操作,如果中间位置的元素值等于目标元素,则返回该元素在数组中的位置;否则根据中间位置的元素值和目标元素的大小关系,缩小查找范围,继续查找,直到找到目标元素或者查找范围为空。如果所有查找范围都被遍历过了,仍然未找到目标元素,则返回 -1,表示未找到。
需要注意的是,二分搜索算法的前提是数组是有序的,如果数组未经排序,则需要先进行排序操作,使得数组有序。此外,需要注意查找范围的边界问题,特别是在求中间位置的时候,要确保左侧部分和右侧部分的长度不为零,否则可能会陷入死循环。