二分法查找 js 算法
二分法查找算法:
采用二分法查找时,数据需是排好序的。
主要思想是:(设查找的数组区间为array[s, e])
(1)确定该区间的中间位置m
(2)将查找的值T与array[m]比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
区域确定如下:
这里设array从小到大排列,
array[m]>T由数组的有序性可知array[m,……,e]>T;
故新的区间为array[s,……,m-1],
类似上面查找区间array[s,……,m-1]。
每一次查找与中间值比较,判断是否查找成功,不成功当前查找区间缩小一半,循环查找,即可。
时间复杂度:O(log2n)。
let arr = [0, 1, 2, 4, 5, 6, 7, 8]; let arr2 = [88, 77, 66, 55, 44, 33, 22, 11]; BinarySearch(arr2, 77); BinarySearch(arr, 2); function BinarySearch(arr, target) { let s = 0; let e = arr.length - 1; let m = Math.floor((s + e) / 2); let sortTag = arr[s] <= arr[e];//确定排序顺序 while (s < e && arr[m] !== target) { if (arr[m] > target) { sortTag && (e = m - 1); !sortTag && (s = m + 1); } else { !sortTag && (e = m - 1); sortTag && (s = m + 1); } m = Math.floor((s + e) / 2); } if (arr[m] == target) { console.log('找到了,位置%s', m); return m; } else { console.log('没找到'); return -1; } }
二分法查找 js 算法的更多相关文章
- 二分法查找 --JS 实现
var indexOfSorted = function f(arr,n){ //assume : arr has been sorted var low = 0; var high = arr.le ...
- C语言的算法--------二分法查找
int find(int n,int a[],int l){int low=0;int high=l-1;int middle=0;while(low<high){middle=(low+hig ...
- 查找算法:二分法查找及其python实现案例
承接上一篇:查找:顺序查找与二分法查找,将二分法更多详细的python实现解题写下笔记. 简单方法 ''' 二分法查找在列表中的用户输入值,返回index 三种情况跳出循环体: LR相邻 LR位置重合 ...
- iOS 排序算法总结、二分法查找
1.插入排序 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环,直到全部排好顺序. 直接插 ...
- python的算法:二分法查找(1)
1.什么是二分法查找: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从 ...
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
查找功能是数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1)顺 ...
- js冒泡排序与二分法查找
冒泡排序 var attr=[1,5,7,6,3,9,2,8,4]; var zj=0; //控制比较轮数 for(var i=0;i<attr.length-1;i++) { //控制每轮的比 ...
- Java 实现二分法查找算法
算法 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2. 1.开始令 ...
- C#实现二分法查找算法
/// <summary> /// 二分法查找 /// </summary> /// <param name="arr"></param& ...
随机推荐
- WPF 内存释放
原文:WPF 内存释放 在WPF 项目中引用到Transitionals 实现图片转场特效,发现每次图片转场内存都会增加,在每次转场后进行内存压缩 记录 解决方案如下: GC.Collect(); G ...
- 【codeforces 29B】Traffic Lights
[题目链接]:http://codeforces.com/problemset/problem/29/B [题意] 一辆车; 让从A开到B; 然后速度是v; (只有在信号灯前面才能停下来..否则其他时 ...
- NYIST 1006 偷西瓜
偷西瓜 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 对于农村的孩子来说最大的乐趣,莫过于和小伙伴们一块下地偷西瓜了,虽然孩子们条件不是很好,但是往往他们很聪明,他 ...
- Failed to initialize component [Connector[HTTP/1.1-8086]]
严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8086"] java. ...
- MS ACCESS MID函数
select * from GongCheng where MID(GCWYBH,3,8)='" + time.Date.ToString("yyyyMMdd") + & ...
- 12、NIO、AIO、BIO二
一.NIO2快速读写文件 写完之后记得flush一下,NIO2不能自行创建文件,需要在文件中判断一下. package com.zxc.L; import org.junit.Test; import ...
- QT跟VC++结合来进行插件的验证机制(遍历vtable,保证虚函数的个数一致,也可使用Q_INVOKABLE宏定义)
由于最近公司要开发一个以C++插件机制为主的,主要有一个问题就是C++的二进制兼容性的问题.一旦类使用虚函数,只要随便改动下增删查改下头文件的虚函数,就会导致程序在跑的时候进行乱跳,因为这个时候exe ...
- Excel操作之VLOOKUP
https://support.office.com/en-us/article/VLOOKUP-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1 Use V ...
- Sqlite3的安装Windows
- Deleting elements
There are several ways to delete elements from a list. If you know the index of the element you want ...