搜索学习笔记

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,表示未找到。

需要注意的是,二分搜索算法的前提是数组是有序的,如果数组未经排序,则需要先进行排序操作,使得数组有序。此外,需要注意查找范围的边界问题,特别是在求中间位置的时候,要确保左侧部分和右侧部分的长度不为零,否则可能会陷入死循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值