【JS 常用查找算法】

本文介绍了三种基本查找算法:线性查找(O(n))、二分查找(O(logn))和哈希查找(平均O(1),考虑哈希冲突)。分别提供了相应的代码实现。

1. 线性查找

线性查找是最简单的一种查找算法,它的基本思想是从头到尾遍历待查找的数据集,找到对应的元素,时间复杂度为O(n)。

代码实现:

function linearSearch(arr, target){
  for(let i = 0; i < arr.length; i++){
    if(arr[i] === target){
      return i;
    }
  }
  return -1;
}

2. 二分查找

二分查找也称为折半查找,它的基本思想是先将数据集排序,然后将数据集从中间分成两部分,如果待查找的元素小于中间值,则在左半部分继续查找,否则在右半部分继续查找,直到找到该元素或者确定该元素不存在,时间复杂度为O(logn)。

代码实现:

function binarySearch(arr, target){
  let low = 0;
  let high = arr.length - 1;
  while(low <= high){
    let mid = Math.floor((low + high) / 2);
    if(target === arr[mid]){
      return mid;
    } else if(target < arr[mid]){
      high = mid - 1;
    } else {
      low = mid + 1;
    }
  }
  return -1;
}

3. 哈希查找

哈希查找又称为散列查找,它的基本思想是通过哈希函数把待查找的元素映射成一个唯一的索引值,然后在该索引位置查找该元素,如果该元素不存在,返回-1。哈希查找的时间复杂度一般为O(1),但在处理哈希冲突时可能会退化为O(n)。

代码实现:

function hashSearch(arr, target){
  let hashTable = new Map();
  for(let i = 0; i < arr.length; i++){
    hashTable.set(arr[i], i);
  }
  if(hashTable.has(target)){
    return hashTable.get(target);
  } else {
    return -1;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值