基于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中void(0)的具体含义解释
Feb 27 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
jQuery图片预加载 等比缩放实现代码
Oct 04 Javascript
javascript实现动态统计图开发实例
Nov 21 Javascript
图解js图片轮播效果
Dec 20 Javascript
jQuery simpleModal插件的使用介绍
Aug 30 Javascript
js css3实现图片拖拽效果
Mar 04 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
微信小程序npm引入vant-weapp的踩坑记录
Aug 01 Javascript
Nuxt使用Vuex的方法示例
Sep 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
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
JS关键字变色实现思路及代码
2013/02/21 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
python实现按关键字筛选日志文件
2019/12/24 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
活动总结模板大全
2015/05/11 职场文书
会计做账心得体会
2016/01/22 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书