JaveScript用二分法与普通遍历(冒泡)
二分法 查找
概念:
从有序的数列中,折半查找.
思路:
--> 找到数组中最中间的元素,将其作为基准
--> 从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用二分法与普通遍历(冒泡)的更多相关文章
- vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)
vue源码业余时间差不多看了一年,以前在网上找帖子,发现很多帖子很零散,都是一部分一部分说,断章的很多,所以自己下定决定一行行看,经过自己坚持与努力,现在基本看完了,差ddf那部分,因为考虑到自己要换 ...
- 82、iOS 基本算法
“冒泡排序.选择排序.快速排序.归并排序.逆序.二分查找.求两个整数的最大公约数和最小公倍数.” 一.冒泡排序 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的 ...
- jQuery源码分析--Event模块(3)
最后剩下了事件的手动触发了.jQuery提供了两个函数trigger和triggerHandler来手动触发事件,可以触发原生事件和自定义的事件.这个触发不单只会触发有jQuery绑定事件,而且也会触 ...
- Python语法速查: 7. 函数基础
返回目录 (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是第一类的(first class),函数也不例外,也是第一类对象.既然是对象,那就可以当作普通的对象数据处理,比如 ...
- list、冒泡、二分法
1.遍历第一次,寻找最大值,并且记录最大值的索引max_index 2.list(dict,str) 伪代码: if(是不是有饭吃): 如果是真 执行 (缩进) else: 如果是假 执行 写代码学习 ...
- js数组及数组应用(冒泡和二分,遍历输出)
一.定义:1)var arr=new Array(); 加数据:arr[0]=1; 2)定义同时赋值:var arr=new Array(1,2,3,4,5); 3)调用:var arr=new Ar ...
- day10 python算法 冒泡算法 二分法 最快查找算法 c3算法
day10 python 1.冒泡算法 冒泡排序,把列表竖起来看,就像一个个气泡往上去(时间复杂度大) lst = [12,3,3,2424,14,3567,534,324 ...
- 9月19日下午JavaScript数组冒泡排列和二分法
数组 一.冒泡排列 对数组attr = [1,8,6,4,5,3,7,2,9]进行由大到小排列,用冒泡排列的方法排列时,会对数组进行比较互换.如果前一个数字较大,这2个元素排列方式不变,如果后一个元素 ...
- Python函数练习:冒泡算法+快速排序(二分法)
冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...
随机推荐
- org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error ...
- 《java.util.concurrent 包源码阅读》11 线程池系列之ThreadPoolExecutor 第一部分
先来看ThreadPoolExecutor的execute方法,这个方法能体现出一个Task被加入到线程池之后都发生了什么: public void execute(Runnable command) ...
- 13. ZooKeeper最佳实践
以下列举了运行和管理ZooKeeper ensemble的一些最佳实践: ZooKeeper数据目录包含快照和事务日志文件.如果autopurge选项未启用,定期清理目录是一个好习惯.另外,管理员可能 ...
- 4.2 例题: 统计字符数 poj2247
问题描述 判断一个由 a-z 这 26 个字符组成的字符串中哪个字符出现的次数最多 输入:第 1 行是测试数据的组数 n,每组测试数据占 1 行,是一个由 a-z 这 26 个字符组 成的字符串,每组 ...
- 并行设计模式(二)-- Master-Worker模式
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Mast ...
- java版Web Socket,实现消息推送
# web socket是什么? WebSocket协议是基于TCP的一种新的网络协议. 它实现了浏览器与服务器全双工(full-duplex)通信,允许服务器主动发送信息给客户端. ## 用途 实时 ...
- Mariadb Galera Cluster 群集 安装部署
#Mariadb Galera Cluster 群集 安装部署 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...
- PHP 算法
1.首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半. 思路:多少行for一次,然后在里面空格和星号for一次. ? 1 2 3 4 5 6 <?php for($i=0 ...
- CenterOS 7 基础命令学习
CentOS 7 命令 网络配置 nmcli(NetworkManageCommandLineInterface)查看网卡 nmtui(NetworkManageTextUserInterface)网 ...
- CI框架使用PHPmailer发送邮件找回密码
之前用PHP+Mysql+jQuery结合ThinkPHP做了一个用户验证邮箱找回密码功能<ThinkPHP之PHP+Mysql+jQuery发送邮箱找回密码>,现在分享一下用CI框架结合 ...