基于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 相关文章推荐
Javascript this 的一些学习总结
Aug 02 Javascript
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
javascript实现单击和双击并存的方法
Dec 13 Javascript
使用jquery清空、复位整个输入域
Apr 02 Javascript
JS获取当前脚本文件的绝对路径
Mar 02 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
详解10分钟学会vue滚动行为
Sep 21 Javascript
浅谈Vue.use的使用
Aug 29 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
Jan 03 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
提高php编程效率技巧
2015/08/13 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
Python对excel的基本操作方法
2021/02/18 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
高校毕业生登记表自我鉴定
2013/11/03 职场文书
自我评价200字分享
2013/12/17 职场文书
海洋科学专业求职信
2014/08/10 职场文书
2014年司机工作总结
2014/11/21 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
Python django中如何使用restful框架
2021/06/23 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers