js二分查找算法
二分查找高效的前提是数据结构是有序的。就好比猜1~100之间的数,先猜50,如果太大了就猜25,如果太小了就猜75.每一次都猜最大值和最小值的中间点.
1.随机生成100个0~100之间的随机数.
var arr = [];
for(var i = ;i<;i++){
arr[i] = Math.floor(Math.random()*);
}
2.排序(冒泡排序)
var sorted=true; //假设已经排好了
for(var i=;i<arr.length-;i++){ //比较乱arr.length-1 次
for(var j=;j<arr.length-1-i;j++){ //每次中两两比较的次数 排好的就不需要比较了
if(arr[j]>arr[j+]){
arr[j] = [arr[j+],arr[j+] = arr[j]][];
sorted=false;
}
}
if(sorted==true){
break;
}
}
3.查找
function search(arr,data){
var max = arr.length-, //最大值
min = ; //最小值
while(min<=max){
var mid = Math.floor((max+min)/); //中间值
if(arr[mid]<data){
min = mid+;
}else if(arr[mid]>data){
max = mid-;
}else{
return mid;
}
}
return -1; //没找到返回-1
}
console.log(arr);//[0, 1, 2, 2, 3, 4, 4, 4, 5, 6, 7, 10, 11, 12, 14, 15, 16, 17, 18, 18, 20, 21, 23, 24, 24, 24, 25, 25, 25, 26, 28, 28, 34, 35, 35, 38, 39, 39, 40, 40, 42, 44, 48, 48, 49, 51, 51, 51, 53, 54, 54, 54, 55, 56, 58, 59, 59, 59, 60, 61, 62, 62, 63, 63, 65, 66, 67, 68, 68, 69, 69, 71, 71, 72, 73, 74, 76, 76, 77, 82, 83, 84, 85, 86, 86, 86, 86, 87, 90, 91, 91, 94, 94, 94, 94, 95, 95, 97, 98, 100]
console.log(search(arr,25)); //27
console.log(search(arr,104)); //-1
4.查找重复次数
通过向左向右遍历查找重复出现的次数。
function count(arr,data){
var count = ;
var position = search(arr,data);
if(position>-){
count++;
for(var i=position-;i>;i--){
if(arr[i]==data){
count++;
}else{
break;
}
}
for(var i=position+;i<arr.length;i++){
if(arr[i]==data){
count++;
}else{
break;
}
}
}
return count;
}
js二分查找算法的更多相关文章
- Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...
- c#-二分查找-算法
折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...
- 二分查找算法(JAVA)
1.二分查找又称折半查找,它是一种效率较高的查找方法. 2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位 ...
- 二分查找算法java实现
今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. 二分查找算法也称为折半搜索 ...
- Java学习之二分查找算法
好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...
- python函数(4):递归函数及二分查找算法
人理解循环,神理解递归! 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...
- python实现二分查找算法
二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...
- 剑指Offer——二分查找算法
剑指Offer--二分查找算法 前言 本片博文主要讲解查找算法的相关知识.重点介绍二分查找. 二分查找算法是在有序数组中用到的较为频繁的一种查找算法,在未接触二分查找算法时,最通用的一种做法是,对数组 ...
- C++二分查找算法演示源码
如下内容段是关于C++二分查找算法演示的内容. #include <cstdio>{ int l = 0, r = n-1; int mid; while (l <= r){ mid ...
随机推荐
- python类与对象-如何让对象支持上下文管理
如何让对象支持上下文管理 问题举例 一个telnet客户端的类TelnetClient, 调用实例的connect(),login(),interact方法 启动客户端与服务器交互,交互完毕后需要调用 ...
- 在C#中,Windows Console控制台 设置控制台标题、禁用关闭按钮、关闭快速编辑模式、插入模式
设置控制台标题 禁用关闭按钮 关闭快速编辑模式 关闭插入模式 设置控制台标题.禁用关闭按钮 #region 设置控制台标题 禁用关闭按钮 [DllImport("user32.dll&quo ...
- dedecms二次开发
安装遇到的问题 修改文件如下 1.date目录下的config.cache.bak.php改成config.cache.php 2install目录下的index.html.install_lock. ...
- PYTHON装饰器用法及演变
'''开放封闭原则: 软件一旦上线之后就应该满足开放封闭原则 具体就是指对修改是封闭的,对扩展是开放的装饰器:什么是装饰器:装饰就是修饰,器指的是工具装饰器本省可以是任意可调用的对象被装饰的对象也可以 ...
- Installing ROS Indigo on the Raspberry Pi
Installing ROS Indigo on the Raspberry Pi Description: This instruction covers the installation of R ...
- Javascript基础语法(三)
数组 1.什么是数组 有许多变量,它们的名称和数据类型都是一致的. 2. 数组声明 var arr = [元素,元素,元素...]; var arr = new Array(元素,元素,元素...); ...
- sql 与 mysql 链接数据库
- vue-cli —— 项目打包及一些注意事项
打包方法: 1.把绝对路径改为相对路径:打开config/index.js 会看到一个build属性,这里就是我们打包的基本配置了.在这里可以修改打包的目录,打包的文件名.最重要的是一定要把绝对目录改 ...
- js中,转义字符的表示
HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希望在网页中显示这些符号, ...
- 牛客OI周赛7-提高组 A 小睿睿的等式
链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...