javascript顺序数组简单实现个二分查找

直接上码了注释写得很详细:

  function bsearch(A,x){
        //l:查找范围左 r:查找范围右
        let l = 0, //查询范围左边界
            r = A.length-1, //查找范围右边界
            guess //中间猜测位置
        while(l <= r){
            //guess等于l,r中间位置
            guess = Math.floor( (l+r)/2 )       

            //判断当前位置是否为要查找的值,是则返回下标
            if(A[guess] === x) return guess
            //如果当前位置值大于要查询的值 右边界位置减一
            else if(A[guess] > x) r = guess -1
            //否则左边界位置加1
            else l = guess + 1
        }
        //找不到返回-1
        return -1
    }
    const a = [3,5,4,7,12,42,47,66,71,78];
    console.log(bsearch(a,12))//4
    console.log(bsearch(a,4))//-1
    console.log(bsearch(a,66))//7
    console.log(bsearch(a,5))//1

原文地址:https://www.cnblogs.com/y-y-y-y/p/10241997.html

时间: 2024-10-03 22:54:01

javascript顺序数组简单实现个二分查找的相关文章

javascript学习6-练习之3二分查找算法

二分查找算法,对数据进行查找并且显示位置. 核心思想:将所查找数据与查询数组中间的数进行比较,findVal<midVal,则在左边进行二分查找,否则在右边进行二分查找递归调用 具体代码如下: 1 //二分查找 2 var string2=[1,3,42,88,123,143]; 3 var leftIndex=0; 4 var rightIndex=5; 5 function binarySearch(string2,findVal,leftIndex,rightIndex) 6 { 7 if

python常用的简单算法,二分查找、冒泡排序、数组翻转等

1.二分查找:主要用于查询元素数量较多的列表,采用二分查找,取中位值,进行大小比较,可以提高效率 1 #二分查找,用于在较大的数据列表中查询某个值,考虑到元素比较多,单纯的遍历会造成内存压力过大,考虑使用二分查找 2 #二分查找的关键在于查询中间值,将需要查找的值与中间值进行比较,然后确定查找方向 3 def binary_search(data_source,find_n): 4 #取中位数 5 mid=int(len(data_source)/2) 6 7 if len(data_sourc

[LeetCode] #1# Two Sum : 数组/哈希表/二分查找

一. 题目 1. Two SumTotal Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solutio

简单实现一下二分查找

我们昨天大致地讲了一下二分查找 的概念,今天我们要来学习一下如何用python代码把二分查找简单地实现一下. 好的,废话不多说,直接看代码: def LSF(seq, number, lower, upper) if lower == upper: assert number == seq[upper] return upper else: middle = (lower + upper)/2 if number > seq[middle]: return search(seq, number,

LeetCode: 153. 寻找旋转排序数组中的最小值(二分查找)

假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重复元素. 示例 1: 输入: [3,4,5,1,2]输出: 1示例 2: 输入: [4,5,6,7,0,1,2]输出: 0 public int findMin(int[] nums) { int lo = 0, hi = nums.length - 1; while (lo < hi) { int

JAVASCRIPT对数组简单处理

在数组的开头添加元素: 使用的是splice()方法 arr.splice(index,0,元素):index:是插入的位置 元素: 要插入的元素var arr = [1,2,3,4];arr.splice(0,0,5);结果: console.log(arr); [5,1,2,3,4] 在数组的后面添加元素:使用的是push()方法,并且返回数组的长度var arr = ['king','tom'];arr.push(item);结果: console..log(arr); ['king','

(二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置

#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; /** * 从有序递增旋转数组45679123 中找到数字6的位置 * 数组递增 但有旋转 * 二分查找思想 * 时间复杂度小于O(N) * {7,8,9,10,1,2,3,4,5,6} *************/ int find_revolve_array(const int arr[], int len, int value) { if

二分查找总结

最近刷leetcode和lintcode,做到二分查找的部分,发现其实这种类型的题目很有规律,题目大致的分为以下几类: 1.最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回-1或者是它将会被按顺序插入的位置.这种题目继续进阶一下就是在有序数组中查找元素的上下限.继续做可以求两个区间的交集. 2.旋转数组问题,就是将一个有序数组进行旋转,然后在数组中查找某个值,其中分为数组中有重复元素和没有重复元素两种情况. 3.在杨氏矩阵中利用二分查

OC版二分查找

二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的.它的基础思想:获取数组的中间值,将数组分割成两份,利用中间值跟指定的值进行比较,如果中间值大于指定的值,就在数组的左边进行查找:如果中间值小于指定值,就在数组的右边进行查找.如此循环的执行下去,最终找到符合的值. 二分查找优点:1.速度快 2.比较次数少 3.性能好  当然了,缺点也很明显:1.必须是一个有序的数组(升序或者降序) 2.适用范围:适用不经常变动的数组 上源代码: - (void)viewD