js实现二分搜索法
二分搜索法:
也称折半搜索,是一种在有序数组中查找特定元素的搜索算法。
实现步骤:
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实现二分搜索法的更多相关文章
- LeetCode Binary Search Summary 二分搜索法小结
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在LeetCode中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目 ...
- [LeetCode] Binary Search 二分搜索法
Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...
- Leetcode: 二分搜索法
package com.LeetCode; /** * 算法:二分搜索法查找一个值,并返回索引值 * https://leetcode.com/problems/search-insert-posit ...
- Java实现 LeetCode 719 找出第 k 小的距离对(二分搜索法+二分猜数字)
719. 找出第 k 小的距离对 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入: nums = [1,3, ...
- 二分搜索法(转载自vanezkw)
二分查找算法java实现 今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. ...
- js实现二分查找算法
二分查找:是一种搜索某个值的索引的算法. 基本条件:有序的数组. 思路:1.将数组折半,分成左右两个数组. 2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半. 3.之后继续折半查找, ...
- js实现二分查找
二分查找需要数组是有序的,1.先从有序数组的最中间元素开始查找,如果和要查找的元素相等,直接返回索引,若不相等则下一步.2.如果指定的元素大于或者小于中间元素,则在大于或小于的那一半区域内查找,重复第 ...
- 常见查找算法之php, js,python版
常用算法 >>>1. 顺序查找, 也叫线性查找, 它从第一个记录开始, 挨个进行对比, 是最基本的查找技术 javaScript 版顺序查找算法: // 顺序查找(线性查找) 只做找 ...
- NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】
914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...
随机推荐
- LoadRunner 录制 mobile
方法一:本地安装安卓模拟器,用LR选择模拟器录制方式录制 方法二:手机真机需要root,可以在电脑上下载一键root工具(如卓大师),然后手机和电脑用数据线连接,然后root. 在手机上运行 Mobi ...
- 查询MYSQl数据表中的最后一条记录
mysql: select * from table order by id DESC limit 1 oracle: select * from emp where id in (select ma ...
- Python 以指定的概率选取元素
Python 以指定的概率选取元素 Problem You want to pick an item at random from a list, just about as random.choic ...
- Linux命令-文件处理命令:tail
tail /etc/services 查看etc目录的services文件最后10行内容(默认显示后10行内容) tail -n /etc/services 查看etc目录的services文件的后5 ...
- 视频播放器控制原理:ffmpeg之ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- C#指南,重温基础,展望远方!(11)C#委托
委托类型表示对具有特定参数列表和返回类型的方法的引用. 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体. 委托类似于其他一些语言中的函数指针概念,但与函数指针不同的是,委托不仅面向对象,还 ...
- xdebug安装教程
自动分析应该下载的文件: http://xdebug.org/wizard.php
- vim 创建文件自动生成头部注释
知识点: 1. autocmd命令: 当读写一个文件时,自动执行指定的命令; 2. autocmd event: BufNewFile 当文件不存在时开始写文件; 3. exec命令 execute命 ...
- visual studio 2013 触发挂起事件
在 VS2013 中调试 winddows phone 或者 win rt 程序的时候,需要手动触发 “挂起” 事件. 如果找不到这个按钮: 1.打开菜单栏中的 “自定义” 对话框: 2.选择调试位置 ...
- vue2.0项目的环境配置以及有哪些的坑
npm run dev项目运行:$ git pull origin master 更新代码项目的提交代码git push -u origin master 这里就开始准备提交到网络上了 项目的地址gi ...