二分法 查找

  概念:

    从有序的数列中,折半查找.

  思路:

    -->  找到数组中最中间的元素,将其作为基准

    -->  从0开始判断数组中的元素,与基准进行比较

    -->  比基准小的元素,存入左边,

        比基准打得元素,存入右边

        依次递归,得出结果

二分法查找函数

  function getNum(target, Arr){
var middle = Math.floor(Arr.length / 2) ,res;
var last = Arr.length;
var temp;
function getRes(target,Arr){
count++;
if (target>Arr[middle]){
temp=middle;
middle= Math.floor(middle+Math.abs(last-middle)/2);
last=temp;
}else if(target < Arr[middle]){
temp=middle;
middle = Math.floor(middle-Math.abs(last - middle) / 2) ;
last=temp;
}else{
res = middle;
return;
}
if(last==middle){
Arr[middle]!=target;
res = "不存在";
return;
}
return getRes(target,Arr);
};
getRes(target, Arr);
return res;
}

普通遍历查找函数

 function getNum2(target, arr) {
for (var i = 0; i < arr.length; i++) {
count2++;
if (target == arr[i]) {
return i;
}
}
return "不存在";
}

生成随机数组

  (function(){
var arr = [];
for (var i = 0; i < 50000; i++) {
var flag = true;
var ele = Math.floor(Math.random() * 100000);
for (var j = 0; j < arr.length; j++) {
if (arr[j] == ele) {
flag = false;
break;
}
}
flag && arr.push(ele);
}
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - i; j++) {
var temp;
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
window.arr=arr;
console.log(arr);//数组生成完毕,打印结果;
})()

二分法查找

        var count=0;
console.log("二分法查找------------------------");
console.time("二分法耗时");
console.log("结果" +getNum(31322, arr));
console.log("查找次数为:"+count);
console.timeEnd("二分法耗时");
console.log("普通查找------------------------");

普通遍历

        var count2=0;
console.time("普通遍历耗时");
console.log("结果" +getNum2(31322, arr));
console.log("查找次数为:"+count2);
console.timeEnd("普通遍历耗时");

将二分法与普通遍历封装为函数

  function run(x){
count=count2=0;
console.log("二分法查找------------------------");
console.time("二分法耗时");
console.log("结果" +getNum(x, arr));
console.log("查找次数为:"+count);
console.timeEnd("二分法耗时");
console.log("普通查找------------------------");
function getNum2(target, arr) {
for (var i = 0; i < arr.length; i++) {
count2++;
if (target == arr[i]) {
return i;
}
}
return "不存在";
}
var count2 = 0;
console.time("普通遍历耗时");
console.log("结果"+getNum2(x, arr));
console.log("查找次数为:"+count2);
console.timeEnd("普通遍历耗时");
};

直接输入即可验证结果

JaveScript用二分法与普通遍历(冒泡)的更多相关文章

  1. vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)

    vue源码业余时间差不多看了一年,以前在网上找帖子,发现很多帖子很零散,都是一部分一部分说,断章的很多,所以自己下定决定一行行看,经过自己坚持与努力,现在基本看完了,差ddf那部分,因为考虑到自己要换 ...

  2. 82、iOS 基本算法

    “冒泡排序.选择排序.快速排序.归并排序.逆序.二分查找.求两个整数的最大公约数和最小公倍数.” 一.冒泡排序 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的 ...

  3. jQuery源码分析--Event模块(3)

    最后剩下了事件的手动触发了.jQuery提供了两个函数trigger和triggerHandler来手动触发事件,可以触发原生事件和自定义的事件.这个触发不单只会触发有jQuery绑定事件,而且也会触 ...

  4. Python语法速查: 7. 函数基础

    返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...

  5. list、冒泡、二分法

    1.遍历第一次,寻找最大值,并且记录最大值的索引max_index 2.list(dict,str) 伪代码: if(是不是有饭吃): 如果是真 执行 (缩进) else: 如果是假 执行 写代码学习 ...

  6. js数组及数组应用(冒泡和二分,遍历输出)

    一.定义:1)var arr=new Array(); 加数据:arr[0]=1; 2)定义同时赋值:var arr=new Array(1,2,3,4,5); 3)调用:var arr=new Ar ...

  7. day10 python算法 冒泡算法 二分法 最快查找算法 c3算法

    day10 python       1.冒泡算法         冒泡排序,把列表竖起来看,就像一个个气泡往上去(时间复杂度大) lst = [12,3,3,2424,14,3567,534,324 ...

  8. 9月19日下午JavaScript数组冒泡排列和二分法

    数组 一.冒泡排列 对数组attr = [1,8,6,4,5,3,7,2,9]进行由大到小排列,用冒泡排列的方法排列时,会对数组进行比较互换.如果前一个数字较大,这2个元素排列方式不变,如果后一个元素 ...

  9. Python函数练习:冒泡算法+快速排序(二分法)

    冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...

随机推荐

  1. SpringBoot之彩色输出

    spring.output.ansi.enabled NEVER:禁用ANSI-colored输出(默认项) DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(推荐项) ALWAYS:总 ...

  2. ionic开发环境搭建之android及问题

    1. 准备工作: a)     配置java开发环境 b)    配置安卓开发环境 注:下载android-studio后,可能会出现android一直在编译,出现这种情况,关掉你的as ,找到你的路 ...

  3. js实际工作中的技能点

    1.基础知识 a.原型,原型链 b.作用域,闭包 c.异步,单线程 2.JS API a.DOM操作 b.Ajax c.事件绑定 3.开发环境 a.版本管理(git) b.模块化(require.js ...

  4. js中变量的作用域、变量提升、链式作用域结构

    一:作用域 在ES6之前,javascript没有块级作用域(一对{}即为一个块级作用域),只有全局作用域和函数作用域(局部),因此,对应的有全局变量和局部变量.在函数内部可以访问到全局变量,但在函数 ...

  5. openGL光源概念

    1. 光照模型      环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失. 全局环境光——每个光源都能对场景提供环境光.此外,还有一个环境光,它不来自 ...

  6. 关于cocos2d-x面试的问题

    关于高效渲染的问题: 1.先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染凋用.也就是说,渲染的次数越少,游戏的运行效率越高. 2.CCSpriteBatchNode就是cocos ...

  7. 《java.util.concurrent 包源码阅读》 结束语

    <java.util.concurrent 包源码阅读>系列文章已经全部写完了.开始的几篇文章是根据自己的读书笔记整理出来的(当时只阅读了部分的源代码),后面的大部分都是一边读源代码,一边 ...

  8. 关于Could not resolve dependencies for project

    异常:Could not resolve dependencies for project 思路:网上提出的方案思路都是把相互依赖的项目导入到本地仓库中. 目前一劳永逸的方法是:将<packag ...

  9. 2719:陶陶摘苹果-poj

    2719:陶陶摘苹果 总时间限制:  1000ms 内存限制:  65536kB 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米 ...

  10. 【javaFX学习】(一) 建一个简单的界面

    转载注明出处:http://www.cnblogs.com/lensener/p/7976953.html 用过swing都知道有多蛋疼,界面有多丑.自从用了javaFX,腰也不酸了,腿也不疼了. 废 ...