js:数据结构笔记13--检索算法
顺序查找:也称线性查找,暴力查找的一种
- 基本格式:
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--检索算法的更多相关文章
- js:数据结构笔记12--排序算法(2)
高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...
- js:数据结构笔记14--高级算法
动态规划: 递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题: 动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案: function dynFib(n) { ...
- js:数据结构笔记11--排序算法(1)
基本准备: function CArray(numElems) { this.dataStore = []; this.pos = 0; this.numElems = numElems; this. ...
- 廖雪峰js教程笔记13 插入DOM
当我们获得了某个DOM节点,想在这个DOM节点内插入新的DOM,应该如何做? 如果这个DOM节点是空的,例如,<div></div>,那么,直接使用innerHTML = '& ...
- js:数据结构笔记7--哈希表
哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this. ...
- js:数据结构笔记5--链表
数组: 其他语言的数组缺陷:添加/删除数组麻烦: js数组的缺点:被实现为对象,效率低: 如果要实现随机访问,数组还是更好的选择: 链表: 结构图: 基本代码: function Node (elem ...
- js:数据结构笔记4--队列
队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.deque ...
- js:数据结构笔记3--栈
栈是一种特殊的列表,数据结构为LIFO: 定义: function Stack() { this.dataStore = []; this.top = 0; this.push = push; thi ...
- js:数据结构笔记1---数组
JS中数组: 只是一种特殊的对象,比其他语言中效率低: 属性是用来表示偏移量的索引:在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串 ...
随机推荐
- 键盘上各键对应的ASCII码与扫描码
键盘上各键对应的ASCII码与扫描码 vbKeyLButton 0x1 鼠标左键vbKeyRButton 0x2 鼠标右键vbKeyCancel 0x3 CANCEL 键vbKeyMButton 0x ...
- 两周“学会”bootstrap搭建一个移动站点
一直想着用bootstrap搭建网站,它的自适应.元素封装完善.现成的Glyphicons字体图标,省去很多的css.js.ui的工作,可以快速搭建一个客户需要的站点.ytkah自己有一些div+cs ...
- [Effective JavaScript 笔记]第55条:接收关键字参数的选项对象
53节建议保持参数顺序的一致约定对于帮助程序员记住每个参数在函数调用中的意义很重要.参数较少这个主意不错,但如果参数过多后,就出现麻烦了,记忆和理解起来都不太容易. 参数蔓延 如下面这些代码: var ...
- PCL初步使用
转载:http://blog.csdn.net/vbskj/article/details/7819828 本次试验的目的是利用PCL库来重建地形点云数据,并进行显示.总体流程是1)把DEM数据导入P ...
- Leetcode 之Convert Sorted List to Binary Search Tree(55)
和上题思路基本一致,不同的地方在于,链表不能随机访问中间元素. int listLength(ListNode* node) { ; while (node) { n++; node = node-& ...
- 快速传输大数据(tar+lz4+pv)
快速传输大数据(tar+lz4+pv) 如果用传统SCP远程拷贝,速度是比较慢的.现在采用lz4压缩传输.LZ4是一个非常快的无损压缩算法,压缩速度在单核300MB/S,可扩展支持多核CPU.它还 ...
- php获取网页内容方法总结
抓取到的内容在通过正则表达式做一下过滤就得到了你想要的内容,至于如何用正则表达式过滤,在这里就不做介绍了,有兴趣的,以下就是几种常用的用php抓取网页中的内容的方法. 1.file_get_conte ...
- 【转】kettle 的内存设置及输出日志的时间类型
本文转载自:http://blog.csdn.net/dqswuyundong/archive/2010/10/19/5952004.aspx 设置kettle的内存 REM ************ ...
- ORACLE查询当前资产状态,和另一个数据库联查,(查询重复数据中第一条),子查询作为字段查询
背景:ORACLE查询当前资产状态,包含资产信息(表1),资产维修状态(表2),资产报废状态(表3) 如下: 资产信息:
- mongoose学习笔记2--增删改查1
查询 之前我们的集合已经创建成功,我们就先来进行第一步操作 —— 查询. 查询分很多种类型,如条件查询,过滤查询等等,今天只学习了最基本的find查询. 举例: 1.find查询: obj.find( ...