二分法 查找

  概念:

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

  思路:

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

    -->  从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. Python:多线程编程

    1.IO编程 IO(input/output).凡是用到数据交换的地方,都会涉及io编程,例如磁盘,网络的数据传输.在IO编程中,stream(流)是一种重要的概念,分为输入流(input strea ...

  2. python3学习笔记(2)

    一.面向对象(初识)由类和方法组成,类里面封装了很多功能,根据这个类,可以创建一个这个类的对象,即对象是根据这个类创建的,以后这个对象要使用某个功能的时候就从这个类里面的找.例:str -功能一 -功 ...

  3. 10. 管理Apache ZooKeeper配置

    Tips 有关ZooKeeper部署和管理的详细说明,请参阅官方文档http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html. 1. 配置Zo ...

  4. sklearn 划分数据集。

    1.sklearn.model_selection.train_test_split随机划分训练集和测试集 函数原型: X_train,X_test, y_train, y_test =cross_v ...

  5. pku夏令营面试

    北大面试题目: 一.内存交换 内存交换(对换)的基本思想是,把处于等待状态(或在CPU调度原则下被剥夺运行权利) 的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出:把准备好竞争CPU运行的程序 ...

  6. 解决阿里云服务器3306端口无法访问的问题(windows server 2008r2)

    3306端口一般是指mysql数据的默认端口.郁闷了几天的问题,远程无法连接服务器上的mysql服务.今天终于得到彻底解决. 首先,你要确保在服务器上安装好Mysql,并能本地启动.修改密码(如不知道 ...

  7. Python Requests 库学习笔记

    概览 实例引入 import requests response = requests.get('https://www.baidu.com/') print(type(response)) prin ...

  8. 《Linux命令行与shell脚本编程大全》第二十五章 创建与数据库、web及电子邮件相关的脚本

    25.1 MySQL数据库 /* 但是我在虚拟机上安装的时候居然不提示输入密码. 这个可以参考http://blog.csdn.net/sinat_21302587/article/details/7 ...

  9. 原生javascript选项卡

    js选项卡是一个常用的实现.这里我们将用原生js来将其给予实现. 首先html代码: <div id="container"> <input type=" ...

  10. mysql分区分表

    为毛要分表和分区,,,,所有数据库的通病,文件越大,性能越低...那问题就来了.数据越多文件越大...无解?哎,所以说知道 为毛要分区了吧!那分表又是毛线?分表就是把一张表拆分成若干表,,,根据情况常 ...