顺序查找:也称线性查找,暴力查找的一种

  • 基本格式:
var nums = [];
for(var i = 0; i < 10; ++i) {
nums[i] = Math.floor(Math.random() * 101);
} function seqSearch(arr,data) {
for(var i = 0; i < arr.length; ++i) {
if(arr[i] === data) {
return i;
}
}
return -1;
}
seqSearch(nums,45);

//效率比Array.indexof()低;

  • 查找最值:
function findMin(arr) {
var min = arr[0];
for(var i = 1; i < arr.length; ++i) { //这里从第二个开始查找
if(arr[i] < min) { //arr[i] > max
min = arr[i];
}
}
return min;
}
  • 自组织数据:经过多次查找之后,查找最频繁的元素会从原来的位置移动到数据集的起始位置
var nums = [0,45,101,12,5,12,78,45,5];

function seqSearch(arr,data) {
for(var i = 0; i < arr.length; ++i) {
if(arr[i] === data) {
if( i > 0) {
swap(arr,i,i-1); //swap(arr,i,0);
//console.log(arr);
}
return true;
}
}
return false;
} function swap(arr,index,index1) {
temp = arr[index];
arr[index] = arr[index1];
arr[index1] = temp;
} for(var i = 0; i < 4; ++i) {
seqSearch(nums,5);
} -----------------------------

[0, 45, 101, 5, 12, 12, 78, 45, 5] 
[0, 45, 5, 101, 12, 12, 78, 45, 5] 
[0, 5, 45, 101, 12, 12, 78, 45, 5] 
[5, 0, 45, 101, 12, 12, 78, 45, 5]

二分查找:如果数据是有序的,二分查找比顺序查找算法更高效;

var nums = [0,5,46,85,102,212,503];  //必须先排序好

function binSearch(arr,data) {
var upperBound = arr.length - 1;
lowerBound = 0;
while(lowerBound <= upperBound) {
var mid = Math.floor((upperBound + lowerBound) / 2);
if(arr[mid] < data) {
lowerBound = mid + 1;
} else if(arr[mid] > data) {
upperBound = mid - 1;
} else {
return mid;
}
}
return -1;
} console.log(binSearch(nums,46));
  • 计算次数:
function count(arr,data) {
var count = 0,
position = binSearch(arr,data);
if(position > -1) {
++count;
for(var i = position-1; i > 0; --i) {
if(arr[i] === data) {
++count;
} else {
break;
}
}
for(var i = position + 1; i < arr.length; ++i) {
if(arr[i] === data) {
++count;
} else {
break;
}
}
}
return count;
} console.log(count(nums,5));

  

js:数据结构笔记13--检索算法的更多相关文章

  1. js:数据结构笔记12--排序算法(2)

    高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...

  2. js:数据结构笔记14--高级算法

    动态规划: 递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题: 动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案: function dynFib(n) { ...

  3. js:数据结构笔记11--排序算法(1)

    基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this. ...

  4. 廖雪峰js教程笔记13 插入DOM

    当我们获得了某个DOM节点,想在这个DOM节点内插入新的DOM,应该如何做? 如果这个DOM节点是空的,例如,<div></div>,那么,直接使用innerHTML = '& ...

  5. js:数据结构笔记7--哈希表

    哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this. ...

  6. js:数据结构笔记5--链表

    数组: 其他语言的数组缺陷:添加/删除数组麻烦: js数组的缺点:被实现为对象,效率低: 如果要实现随机访问,数组还是更好的选择: 链表: 结构图: 基本代码: function Node (elem ...

  7. js:数据结构笔记4--队列

    队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.deque ...

  8. js:数据结构笔记3--栈

    栈是一种特殊的列表,数据结构为LIFO: 定义: function Stack() { this.dataStore = []; this.top = 0; this.push = push; thi ...

  9. js:数据结构笔记1---数组

    JS中数组: 只是一种特殊的对象,比其他语言中效率低: 属性是用来表示偏移量的索引:在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串 ...

随机推荐

  1. 微信公开课发布微信官方教程:教你用好微信JS-SDK接口

    微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...

  2. 用了那么久居然没发现firefox快捷键有如此多

    firefox用了也有好几年了,除了ytkah经常用到的搜索Ctrl+F.加入书签Ctrl+D.打开新便签Ctrl+T,鼠标右键菜单,还安装了鼠标手势插件FireGestures,快速关闭标签.撤销关 ...

  3. 如何看K线图基础知识

    在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...

  4. Linux下更好用的帮助命令—cheat

    导读 Linux系统中,我们经常会用man命令来帮助查看这个命令的具体用法,man是很强大的,但是英语不好的同学用man用起来可能不那么顺手,自然而然的就出现了cheat命令,cheat命令就是通过简 ...

  5. Linux 怎么重命名多个文件

    下面是重命名命令的基本语法. rename [-v -n -f] <pcre> <files> <pcre> 是Perl兼容正则表达式,它表示的是要重命名的文件和该 ...

  6. Java for LeetCode 141 Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...

  7. 【python】choice函数

    来源:http://www.runoob.com/python/func-number-choice.html 描述 choice() 方法返回一个列表,元组或字符串的随机项. 语法 以下是 choi ...

  8. MFC中挂起线程和恢复线程

    DWORD SuspendThread ( HANDLE hThread );   //挂起线程DWORD ResumeThread ( HANDLE hThread );   //恢复线程 比如说我 ...

  9. MVC自带的校验

    一.添加控制器Home和Model数据 public class UserInfo { public int Id { get; set; } [Display(Name="用户名" ...

  10. 如何关闭ie9烦人的提示信息?

    ①Q:如何关闭“IE 限制活动内容”的提示? A:去掉“IE 限制活动内容”的提示: 1. 找到IE的“Internet选项”: 2. 选择“高级”选项卡: 3. 在“设置”下,找到子标题“安全”,将 ...