js实现二分法查找

二分查找是一种高效的搜索算法,它在有序数组中查找指定的元素,二分法查找前提是要对输入数组进行排序,因为二分查找要求数组是有序的。

首先确定了要搜索的数组的左边界(left)和右边界(right),然后在一个循环中执行查找操作。如果找到目标值,它将返回目标值的索引;否则,如果目标值不在数组中,它将返回-1

function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);

    if (arr[mid] === target) {
      return mid; // 找到目标,返回索引
    } else if (arr[mid] < target) {
      left = mid + 1; // 目标在右半部分
    } else {
      right = mid - 1; // 目标在左半部分
    }
  }

  return -1; // 目标不在数组中
}

// 示例用法
const sortedArray = [2, 4, 6, 8, 10, 12, 14, 16, 18];
const targetValue = 12;

const result = binarySearch(sortedArray, targetValue);
if (result !== -1) {
  console.log(`目标 ${targetValue} 在索引 ${result} 处找到。`);
} else {
  console.log(`目标 ${targetValue} 未在数组中找到。`);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是使用JavaScript实现二分查找的示例代码,该代码假设输入数组已经按升序排序: ```javascript function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (arr[mid] === target) { // 目标元素已找到 return mid; } else if (arr[mid] < target) { // 目标元素在右侧 left = mid + 1; } else { // 目标元素在左侧 right = mid - 1; } } // 目标元素不存在于数组中 return -1; } ``` 这个函数接受两个参数:一个已排序的数组 `arr` 和目标元素 `target`。在函数体内,我们使用 `left` 和 `right` 变量来跟踪数组的边界。在每次循环中,我们计算中间索引 `mid`,然后检查该元素是否等于目标元素。如果相等,我们就返回它的索引。如果不相等,我们根据 `mid` 与 `target` 的关系更新 `left` 和 `right` 变量,从而缩小搜索范围。 如果目标元素不在数组中,则函数返回 -1。 ### 回答2: 二分法查找是一种常用的查找算法,它可以在有序数组中快速定位某个特定元素的位置。 下面是用JavaScript实现二分法查找区间代码的示例: ```javascript function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left <= right) { let mid = Math.floor((left + right) / 2); if (arr[mid] === target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; let target = 6; let result = binarySearch(arr, target); console.log(result); // 输出6,表示目标元素6在数组中的索引位置 ``` 这段代码中,`binarySearch`函数接受一个有序数组`arr`和目标元素`target`作为输入参数。首先,我们定义了两个指针`left`和`right`,分别指向数组的起始位置和结束位置。接着,使用`while`循环来迭代查找。在每次迭代中,计算中间位置`mid`,然后比较`arr[mid]`与目标元素`target`的大小关系。如果`arr[mid]`等于`target`,则返回`mid`作为结果;如果`arr[mid]`小于`target`,则更新左指针`left`为`mid + 1`;如果`arr[mid]`大于`target`,则更新右指针`right`为`mid - 1`。直到找到目标元素或者左指针与右指针相遇,循环结束。 这段代码的时间复杂度是O(log n),其中n是数组的长度。由于每次迭代都将查找区间缩小一半,因此二分法查找算法的效率非常高。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值