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 ...
随机推荐
- Quill插入html5的video标签
quill的video模块插入的是iframe标签,我们需要的是video标签. 1.定义自己的video模块 declare const require: any; const Quill = re ...
- 第四周Java作业
老师说让用二维数组找最大,也就是最大和块,要求必须挨着,我其实不会写这个程序,所以我只能把自己的思路写出来 我觉得可以大问题缩小,我的思路是先把四个数一个正方形来进行计算,然后六个数矩形,把他化成两个 ...
- CDI services--interceptors(拦截器)
1.拦截器综述 拦截器的功能是定义在Java拦截器规范. 拦截器规范定义了三种拦截点: 业务方法拦截, 生命周期回调侦听, 超时拦截(EJB)方法. 在容器的生命周期中进行拦截 1 2 3 4 pub ...
- 小程序开发-Now you can provide attr "wx:key" for a "wx:for" to improve performance
Now you can provide attr "wx:key" for a "wx:for" to improve performance 是一个关于性能优 ...
- kafka安装教程
今天需要在新机器上安装一个kafka集群,其实kafka我已经装了十个不止了,但是没有一个是为生产考虑的,因此比较汗颜,今天好好地把kafka的安装以及配置梳理一下: 1,kafka版本选取: 现在我 ...
- zw字王《中华大字库》2018版升级项目正式启动
zw字王<中华大字库>2018版升级项目正式启动 https://www.cnblogs.com/ziwang/p/9500537.html 这次升级是和字库协会一起合作,首批推出的字体, ...
- 【JavaScript】轮播图
代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...
- angularjs简单介绍和特点
首先angular是一个mvc框架, 使用mvc解耦, 采用model, controller以及view的方式去组织代码, 会将一个html页面分成若干个模块, 每个模块都有自己的scope, se ...
- HTTP请求中GET和POST的区别
一.原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式. HTTP定义了与服务器交互 ...
- 码云和git
第一步: 码云上注册: 第二部: 创建项目;根据需求,哒哒哒全部填完 第三部: 设置公钥(重点来了,头晕) 1. 打开git终端 git Bash 2.进入.ssh目录 输入命令 cd ~/.ssh ...