基于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 相关文章推荐
基于jquery的Repeater实现代码
Jul 17 Javascript
jQuery.extend 函数详解
Feb 03 Javascript
Jquery 表单验证类介绍与实例
Jun 09 Javascript
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
Javascript的严格模式strict mode详细介绍
Jun 06 Javascript
浅析Node.js中的内存泄漏问题
Jun 23 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
JavaScript this在函数中的指向及实例详解
Oct 14 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 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
用PHP读注册表
2006/10/09 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
arguments对象
2006/11/20 Javascript
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
Django nginx配置实现过程详解
2020/09/10 Python
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
大学生自我鉴定
2013/12/08 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
交通安全标语
2014/06/06 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
2014年加油站工作总结
2014/12/04 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL