基于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定义背景动态切换效果的方法
Mar 23 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
JavaScript继承学习笔记【新手必看】
May 10 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
Apr 12 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
JS库之wow.js使用方法
Sep 14 Javascript
Vue组件创建和传值的方法
Aug 17 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
php实例分享之二维数组排序
2014/05/15 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
多广告投放代码 推荐
2006/11/13 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
页面中js执行顺序
2009/11/09 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
database面试题
2013/03/28 面试题
农村婚礼证婚词
2014/01/08 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
公证书
2019/04/17 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
了解Redis常见应用场景
2021/06/23 Redis
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL