二分搜索法:

  也称折半搜索,是一种在有序数组中查找特定元素的搜索算法。

实现步骤:

  1. 首先从数组中间开始查找对比,若相等则找到,直接返回中间元素的索引。

  2. 若查找值小于中间值,则在小于中间值的那一部分执行步骤1的操作。

  3. 若查找值大于中间值,则在大于中间值的那一部分执行步骤1的操作。

  4. 否则,返回结果为查不到,返回-1。

方法一:

    function binary_search1(arr, key) {
var low = 0;
var high = arr.length - 1; while (low <= high) {
var mid = parseInt((low + high) / 2); if (key === arr[mid]) {
return mid;
}
else if (key < arr[mid]) {
high = mid + 1;
}
else if (key > arr[mid]) {
low = mid - 1;
}
else {
return -1;
}
}
}   var arr = [1,2,3,4,5,6,7,8];
  console.log(binary_search1(arr, 3));

方法二:

    function binary_search2 (arr, low, high, key) {
if (low > high) {
return -1;
} var mid = parseInt((low + high) / 2); if (key === arr[mid]) {
return mid;
}
else if (key < arr[mid]) {
high = mid - 1;
return binary_search2(arr, low, high, key);
}
else if (key > arr[mid]) {
low = mid + 1;
return binary_search2(arr, low, high, key); }
}   

   var arr = [1,2,3,4,5,6,7,8];
   console.log(binary_search2(arr, 0, 7, 3));

js实现二分搜索法的更多相关文章

  1. LeetCode Binary Search Summary 二分搜索法小结

    二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在LeetCode中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目 ...

  2. [LeetCode] Binary Search 二分搜索法

    Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...

  3. Leetcode: 二分搜索法

    package com.LeetCode; /** * 算法:二分搜索法查找一个值,并返回索引值 * https://leetcode.com/problems/search-insert-posit ...

  4. Java实现 LeetCode 719 找出第 k 小的距离对(二分搜索法+二分猜数字)

    719. 找出第 k 小的距离对 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入: nums = [1,3, ...

  5. 二分搜索法(转载自vanezkw)

    二分查找算法java实现 今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. ...

  6. js实现二分查找算法

    二分查找:是一种搜索某个值的索引的算法. 基本条件:有序的数组. 思路:1.将数组折半,分成左右两个数组. 2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半. 3.之后继续折半查找, ...

  7. js实现二分查找

    二分查找需要数组是有序的,1.先从有序数组的最中间元素开始查找,如果和要查找的元素相等,直接返回索引,若不相等则下一步.2.如果指定的元素大于或者小于中间元素,则在大于或小于的那一半区域内查找,重复第 ...

  8. 常见查找算法之php, js,python版

    常用算法 >>>1. 顺序查找, 也叫线性查找, 它从第一个记录开始, 挨个进行对比, 是最基本的查找技术 javaScript 版顺序查找算法: // 顺序查找(线性查找) 只做找 ...

  9. NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】

    914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...

随机推荐

  1. ubuntu开启ftp服务

    首先再防火墙中开启21和20端口 iptables -A INPUT -p tcp --dport -j ACCEPT iptables -A INPUT -p tcp --dport -j ACCE ...

  2. 微信小程序—智能小蜜(基于智能语义解析olami开放平台)

    概述 该程序支持功能有查天气.查诗词.查百科.算算术.查日历.看笑话.看故事.聊天等,通过用户输入语句智能解析用户意图输出相应答案. 详细 代码下载:http://www.demodashi.com/ ...

  3. MySQL实现允许远程用户登录(使用Navicat for MySQL工具)

    一.方式一和方式二都可以,建议方式二. 前提条件:在服务器上将MySQL的配置文件 /etc/mysql/my.cnf中使用: sudo vi /etc/mysql/my.cnf 找到bind-add ...

  4. iOS-开发者相关的几种证书(转)

    分享一篇关于苹果开发者证书非常详细的解释. 哈哈,我太懒了,直接转发链接. iOS-开发者相关的几种证书

  5. 求子数组的最大和要求O(n)

    //求子数组的最大和 //输入一个整形数组.有整数也有负数,数组中连续一个或多个子数组,每一个子数组都有一个和,求全部子数组的和的最大值,要求时间复杂度O(n) #include<iostrea ...

  6. C# 文件与路径操作

    OpenFileDialog private void btnOpenFileDialog_Click(object sender, EventArgs e) { OpenFileDialog ope ...

  7. unity, asset operations

    //----create asset //ref: http://wiki.unity3d.com/index.php?title=CreateScriptableObjectAsset CmyScr ...

  8. 使用eclipse进行web开发的3个lib文件夹

    1.右击project>Build Path>Configure Build Path(一般是在你的项目文件夹中手动创建一个lib文件夹,里面设置若干子文件夹存放不同的jar包,然后通过C ...

  9. dp之多重背包poj2392

    题意:有k种石头,高为hi,在不超过ai的高度下,这种石头可以放置,有ci种这个石头,求这些石头所能放置的最高高度......... 思路:以往的什么硬币种数,最大硬币数之类的,他们的硬币都已经是排好 ...

  10. linux如何查看CPU,内存,机器型号,网卡信息

    查看CPU信息(型号)# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c      8  Intel(R) Xeon(R) CPU     ...