js查找—顺序表和有序表的
来源:互联网 发布:大数据 涂子沛 mobi 编辑:程序博客网 时间:2024/06/08 11:06
/* 1. 顺序表查找 *//* 一般方法。 */function search0(arr,data) { for(var i=0,len=arr.length;i<len;i++){ if(data===arr[i]){ return i; } } return -1;}console.log(search0([1,2,3,4],3)); // 2/* 设置哨兵的方法,旨在消除一般方法中每次都要判断下标是否越界的开销。 */function search1(arr,data) { var n=arr.length-1; // js数组越界时的值为undefined,与要找的值也是不相等的,可能会导致无线循环下去! // 所以也需要arr[n]!==undefined来判断是否越界,这样的话,与上面的一般方法似乎差别不大 while (arr[n]!==undefined&&arr[n]!==data){ n--; } return n;}console.log(search1([1,2,0,4],2)); // 1/* forEach的方法,可以找到所有的目标元素的下标 */function search2(arr,data) { //返回值为data的元素的下标 var sub=[]; arr.forEach(function (item,index) { if(item===data){sub.push(index);} }); return sub;}console.log(search2([1,2,3,4,2],2)); // [ 1, 4 ]/* 2. 有序表查找 *//* 二分查找,时间复杂度O(logn) */function binSearch(arr,data) { var low=0, high=arr.length-1, mid; while (low<=high){ mid=Math.floor((low+high)/2); if(arr[mid]<data){ low=mid+1; }else if(arr[mid]>data){ high=mid-1; }else{ return mid; } } return -1;}var b=[2,6,9,14,46,67,99];console.log(binSearch(b,67)); //5/* 插值查找,时间复杂度O(logn) ,不适合数据分布极端不均匀的情况([0,1,2,2000,2001,...,99998,99999])*//* 原理:由二分查找,有mid=(low+high)/2=low+1/2*(high-low),将1/2用(data-arr[low])/(arr[high]-arr[low])来替换 */function interpSearch(arr,data) { var low=0, high=arr.length-1, mid; while (low<=high){ //mid=Math.floor((low+high)/2); mid=Math.floor( low+(high-low)*((data-arr[low])/(arr[high]-arr[low])) ); if(arr[mid]<data){ low=mid+1; }else if(arr[mid]>data){ high=mid-1; }else{ return mid; } } return -1;}var c=[2,6,9,14,46,67]; console.log(interpSearch(c,2)); // 0
阅读全文
0 0
- js查找—顺序表和有序表的
- 查找-顺序,有序表
- 顺序表和有序表的查找以及有序表的递归查找
- 查找:链表顺序查找和有序数组二分查找
- 有序表的顺序查找分析
- 二分查找—有序顺序表
- 顺序表查找、有序表查找、索引顺序表查找
- 有序顺序存储线形表的二分法查找
- 有序表的索引顺序结构查找次数分析
- 大话数据结构—顺序表、有序表、线性索引查找
- 有序表的查找
- 有序表的查找
- 有序顺序表查询(二分查找)
- 静态表查找--顺序表的查找(有序)--折半查找
- 有序表和无序表分别进行顺序查找,对于查找失败的情况下,它们的平均查找长度是不同的
- 顺序表的创建,插入,删除,查找,逆序以及合并两个有序的顺序表
- 数据结构编程笔记二十四:第九章 查找 顺序表和有序表(静态查找表)查找算法的实现
- 查找(一)静态查找的顺序查找和 有序折半查找
- 字符串中的字符统计
- JS刷新页面的几种方法
- Java技术常用设计模式(三)--- 模板方法模式
- Sysbench 性能压测及MySQL性能压测
- C++ dynamic_cast和static_cast
- js查找—顺序表和有序表的
- 商城小程序-- 专题精选
- java se 基础知识总结
- springmvc入门---框架搭建
- 关于怎么将DragonBones的第三方库封装到cocos2dx的工程中
- mysql创建存储过程
- 常见浏览器兼容问题及解决办法
- 在windows平台下使用Git CMD使用reset命令出现More?错误的解决方案
- libsvm svm-scale的学习和使用