基于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 cookie操作代码
Mar 14 Javascript
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
基于jQuery实现收缩展开功能
Mar 18 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 Javascript
vue2笔记 — vue-router路由懒加载的实现
Mar 03 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
使用DataTable插件实现异步加载数据
Nov 19 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
Node.js如何对SQLite的async/await封装详解
Feb 14 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP防止跨域提交表单
2013/11/01 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
国际贸易专业自荐信
2014/06/10 职场文书
企业员工集体活动方案
2014/08/17 职场文书
主要领导对照检查材料
2014/08/26 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
处级干部考察材料
2014/12/24 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
Python中三种花式打印的示例详解
2022/03/19 Python