全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

本文实例讲述了基于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排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

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


# JavaScript  # 顺序查找  # 算法  # javascript数据结构与算法之检索算法  # JavaScript字符串检索字符的方法  # js仿淘宝的拼音检索特效代码  # JavaScript实现在数组中查找不同顺序排列的字符串  # Javascript获取数组中的最大值和最小值的方法汇总  # 求js数组的最大值和最小值的四种方法  # javascript实现查找数组中最大值方法汇总  # JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】  # 遍历  # 一遍  # 动了  # 率高  # 则将  # 都是  # 不移  # 放在  # 相关内容  # 第一个  # 不需要  # 会不会  # 是从  # 感兴趣  # 我们可以  # 数据结构  # 给大家  # 三种  # 更快  # 指的是 


相关文章: 教育培训网站制作流程,请问edu教育网站的域名怎么申请?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何彻底卸载建站之星软件?  简历在线制作网站免费版,如何创建个人简历?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  建站主机如何安装配置?新手必看操作指南  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  阿里云网站制作公司,阿里云快速搭建网站好用吗?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  如何快速建站并高效导出源代码?  建站之星各版本价格是多少?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  建站之星如何快速生成多端适配网站?  如何在云主机上快速搭建多站点网站?  如何配置支付宝与微信支付功能?  网站图片在线制作软件,怎么在图片上做链接?  清除minerd进程的简单方法  如何在Tomcat中配置并部署网站项目?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  ui设计制作网站有哪些,手机UI设计网址吗?  如何规划企业建站流程的关键步骤?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  孙琪峥织梦建站教程如何优化数据库安全?  如何选择域名并搭建高效网站?  如何通过宝塔面板实现本地网站访问?  如何快速搭建响应式可视化网站?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何通过NAT技术实现内网高效建站?  简单实现Android文件上传  建站之星导航菜单设置与功能模块配置全攻略  建站之星导航配置指南:自助建站与SEO优化全解析  行程制作网站有哪些,第三方机票电子行程单怎么开?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  常州自助建站工具推荐:低成本搭建与模板选择技巧  中山网站制作网页,中山新生登记系统登记流程?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  如何自定义建站之星模板颜色并下载新样式?  宝塔面板创建网站无法访问?如何快速排查修复?  ,柠檬视频怎样兑换vip?  营销式网站制作方案,销售哪个网站招聘效果最好?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  安云自助建站系统如何快速提升SEO排名?  开源网站制作软件,开源网站什么意思?  如何在IIS中新建站点并配置端口与物理路径?  建站之星如何取消后台验证码生成?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  网站制作网站,深圳做网站哪家比较好?  定制建站方案优化指南:企业官网开发与建站费用解析  c# await 一个已经完成的Task会发生什么 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。