二分查找高效的前提是数据结构是有序的。就好比猜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二分查找算法的更多相关文章

  1. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  2. c#-二分查找-算法

    折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...

  3. 二分查找算法(JAVA)

    1.二分查找又称折半查找,它是一种效率较高的查找方法. 2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位 ...

  4. 二分查找算法java实现

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

  5. Java学习之二分查找算法

    好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...

  6. python函数(4):递归函数及二分查找算法

    人理解循环,神理解递归!  一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...

  7. python实现二分查找算法

    二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...

  8. 剑指Offer——二分查找算法

    剑指Offer--二分查找算法 前言 本片博文主要讲解查找算法的相关知识.重点介绍二分查找. 二分查找算法是在有序数组中用到的较为频繁的一种查找算法,在未接触二分查找算法时,最通用的一种做法是,对数组 ...

  9. C++二分查找算法演示源码

    如下内容段是关于C++二分查找算法演示的内容. #include <cstdio>{ int l = 0, r = n-1; int mid; while (l <= r){ mid ...

随机推荐

  1. mysql----------原生的sql里面如何根据case then排序

    1.按照三个字段都符合条件来排序 ORDER BY (    CASE    WHEN is_top = 1    AND top_end_time>UNIX_TIMESTAMP()    AN ...

  2. Ubuntu16.04重新安装MySQL数据库

    安装之前先检查mysql是否卸载干净 dpkg --list|grep mysql 如果没有卸载干净请看上篇文章将mysql卸载干净 Ubuntu16.04彻底卸载MySQL 开始安装 可以直接默认安 ...

  3. Android -- 带你从源码角度领悟Dagger2入门到放弃(三)

    1, 前面两篇文章我们知道了怎么使用常用的四种标签,现在我们结合我们自己的项目中去简单的使用 在我们搭建项目的时候,一般会创建自己的Application,在里面进行一些初始化如一些第三方的Green ...

  4. window安装pycharm Django

    pycharm 安装Pycharm  直接在官网下载就可以,这里说一下如何破解注册码的问题: 修改电脑中hosts文件(地址: C:\Windows\System32\drivers\etc ),改变 ...

  5. java核心技术第十版 笔记

    1.java区分大小写 2.类名是以大写字母开头 (驼峰) 3.http://docs.oracle.com/javase/specs  java语言规范 4. /* */ 注释不能嵌套 5. Jav ...

  6. python 开发练习之 监控

    本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设 ...

  7. WTForms

    一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 用户登录简例: fr ...

  8. 2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践

    2018-2019-2 20165316 『网络对抗技术』Exp3:免杀原理与实践 一 免杀原理与实践说明 (一).实验说明 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件, ...

  9. nginx运用

    1.nginx的 命令 start nginx 这样,nginx 服务就启动了.打开任务管理器,查看 nginx.exe 进程,有二个进程会显示,占用系统资源,那是相当的少.然后再打开浏览器,输入 h ...

  10. springboot整合mybatis(使用MyBatis Generator)

    引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...