基于JavaScript实现的顺序查找算法示例


Posted in Javascript onApril 14, 2017

本文实例讲述了基于JavaScript实现的顺序查找算法。分享给大家供大家参考,具体如下:

对于查找数据来说,最简单的方法就是从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果。这个方法叫做顺序查找,有时候也被叫做线性查找。它属于暴力查找技巧的一种。

顺序查找实现起来非常简单,代码如下:

function generalSearch(arr,data){//普通的顺序查找,就是遍历一遍看是否找到
 for(var i=0;i<arr.length;i++){
  if(arr[i]==data){
   return true;
  }
 }
 return false;
}

那么这样会不会效率很低呢?对于未排序的数据集来说,当被查到的数据位于数据集的起始位置时,查找是最快、最成功的。通过将成功找到的元素置于数据集的起始位置,可以保证在以后的操作中元素能被更快的查找到,代码如下:

function betterSearch(arr,data){//自组织查找,将查找率高的依次往前移
 for(var i=0;i<arr.length;i++){
  if(arr[i]==data){
   if(i>0){
    swap(arr,i,i-1);//如果找到则将查找的值和前一个值交换位置
   }
   return true;
  }
 }
 return false;
}
function swap(arr,i,j){//交换位置
 temp=arr[i];
 arr[i]=arr[j];
 arr[j]=temp;
}

那有没有更加好的方法呢?在查找的世界中,有一个“80-20原则”,指的是对某一数据集执行的80%的查找操作都是对其中20%的数据元素进行查找。所以我们可以将查找到且处于后80%的元素放在起始位置,而前20%则不需要改变,代码如下:

function bestSearch(arr,data){//更好的自组织查找,将排名后80%的查找结果调到第一位
 for(var i=0;i<arr.length;i++){
  if(arr[i]==data&&i>(arr.length*0.2)){//如果是后80%
   swap(arr,i,0);
   return true;
  }else if(arr[i]==data){
   return true;//前20%就不移动了
  }
 }
 return false;
}

三种查找的实验代码如下:

//进行试验
var nums=[3,1,4,6,2,9,8,0,5,7];
//普通查找
var bool=generalSearch(nums,3);
document.write(bool+'<br>');//true
var bool=generalSearch(nums,11);
document.write(bool+'<br>');//false
//自组织查找
showNums(nums);//3 1 4 6 2 9 8 0 5 7
betterSearch(nums,2);
showNums(nums);//3 1 4 2 6 9 8 0 5 7
betterSearch(nums,2);
showNums(nums);//3 1 2 4 6 9 8 0 5 7
betterSearch(nums,2);
showNums(nums);//3 2 1 4 6 9 8 0 5 7
//更好的自组织查找
document.write("更好的自组织查找<br>");
bestSearch(nums,5);
showNums(nums);//5 2 1 4 6 9 8 0 3 7
bestSearch(nums,2);
showNums(nums);//5 2 1 4 6 9 8 0 3 7

顺序查找的完整代码:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title></title>
 </head>
 <body>
<script type="text/javascript">
 function generalSearch(arr,data){//普通的顺序查找,就是遍历一遍看是否找到
  for(var i=0;i<arr.length;i++){
   if(arr[i]==data){
    return true;
   }
  }
  return false;
 }
 function betterSearch(arr,data){//自组织查找,将查找率高的依次往前移
  for(var i=0;i<arr.length;i++){
   if(arr[i]==data){
    if(i>0){
     swap(arr,i,i-1);//如果找到则将查找的值和前一个值交换位置
    }
    return true;
   }
  }
  return false;
 }
 function swap(arr,i,j){//交换位置
  temp=arr[i];
  arr[i]=arr[j];
  arr[j]=temp;
 }
 function bestSearch(arr,data){//更好的自组织查找,将排名后80%的查找结果调到第一位
  for(var i=0;i<arr.length;i++){
   if(arr[i]==data&&i>(arr.length*0.2)){//如果是后80%
    swap(arr,i,0);
    return true;
   }else if(arr[i]==data){
    return true;//前20%就不移动了
   }
  }
  return false;
 }
 function showNums(arr){
  for(var i=0;i<arr.length;i++){
   document.write(arr[i]+' ');
  }
  document.write("<br>");
 }
 //进行试验
 var nums=[3,1,4,6,2,9,8,0,5,7];
 //普通查找
 var bool=generalSearch(nums,3);
 document.write(bool+'<br>');//true
 var bool=generalSearch(nums,11);
 document.write(bool+'<br>');//false
 //自组织查找
 showNums(nums);//3 1 4 6 2 9 8 0 5 7
 betterSearch(nums,2);
 showNums(nums);//3 1 4 2 6 9 8 0 5 7
 betterSearch(nums,2);
 showNums(nums);//3 1 2 4 6 9 8 0 5 7
 betterSearch(nums,2);
 showNums(nums);//3 2 1 4 6 9 8 0 5 7
 //更好的自组织查找
 document.write("更好的自组织查找<br>");
 bestSearch(nums,5);
 showNums(nums);//5 2 1 4 6 9 8 0 3 7
 bestSearch(nums,2);
 showNums(nums);//5 2 1 4 6 9 8 0 3 7
</script>
 </body>
</html>

运行效果如下图:

基于JavaScript实现的顺序查找算法示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Prototype Selector对象学习
Jul 23 Javascript
jQuery异步加载数据并添加事件示例
Aug 24 Javascript
jQuery使用animate创建动画用法实例
Aug 07 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
Bootstrap表单布局样式源代码
Jul 04 Javascript
easyUI combobox实现联动效果
Jan 17 Javascript
详解微信小程序 wx.uploadFile 的编码坑
Jan 23 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
VsCode里的Vue模板的实现
Aug 12 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
Apr 14 #Javascript
angularjs实现首页轮播图效果
Apr 14 #Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 #Javascript
微信小程序 下拉菜单简单实例
Apr 13 #Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
Apr 13 #Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 #Javascript
Bootstrap实现各种进度条样式详解
Apr 13 #Javascript
You might like
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
php操作access数据库的方法详解
2017/02/22 PHP
简单的JS多重继承示例
2008/03/13 Javascript
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
2014年大学生党课心得体会范文
2014/03/29 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
2014年消防工作总结
2014/11/21 职场文书
新闻通讯稿范文
2015/07/22 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
MySQL系列之三 基础篇
2021/07/02 MySQL