基于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 相关文章推荐
URL地址中的#符号使用说明
Feb 12 Javascript
editable.js 基于jquery的表格的编辑插件
Oct 24 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
Mar 18 Javascript
JavaScript中使用自然对数ln的方法
Jun 14 Javascript
简单理解js的prototype属性及使用
Dec 07 Javascript
RequireJS 依赖关系的实例(推荐)
Jan 21 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
Aug 04 jQuery
Vue表单之v-model绑定下拉列表功能
May 14 Javascript
javascript实现留言板功能
Feb 08 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.MVC的模板标签系统(二)
2006/09/05 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
jquery实现数字输入框
2017/02/22 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
使用Python的turtle模块画国旗
2019/09/24 Python
python求质数列表的例子
2019/11/24 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
工厂实习感言
2014/01/14 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
2019秋季运动会口号
2019/06/25 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
python实现过滤敏感词
2021/05/08 Python
深入理解Vue的数据响应式
2021/05/15 Vue.js
python 爬取吉首大学网站成绩单
2021/06/02 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python