时间:2021-05-26
本文实例讲述了JavaScript数据结构与算法之检索算法。分享给大家供大家参考,具体如下:
javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
function qSort(arr){ if (arr.length == 0) { return []; } var left = [];//存储小于基准值 var right = [];//存储大于基准值 var pivot = arr[0]; for (var i = 1; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return qSort(left).concat(pivot, qSort(right));//递归}/*二分查找法,基本原理如下:* 将数组的第一个位置设置为下边界(0).将数组的最后一个元素所在的位置设置为上边界(数组的长度减1)。* 若下边界等于或小于上边界,则做如下操作:* (1).将中点设置为(上边界加上下边界) 除以2.* (2). 如果中点的元素小于查询的值,则将下边界设置为中点元素所在下标加1.* (3). 如果中点的元素大于查询的值,则将上边界设置为中点元素所在下标减1.* (4). 否则中点元素即为要查找 的数据,可以进行返回。*/function binSearch(arr,data) { var lowerBound = 0; var upperBound = arr.length - 1; 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;}/**计算重复次数*当binSearch()函数找到某个值时,如果在数据集中还有其他相同的值出现,那么该函数会定位在类似值的附近。*换句话说,其他相同的值可能会出现已找到值的左边或右边。*如果在数据集中能找到这个值,那么这个函数将开始通过两个循环来统计这个值出现的次数。*第一个循环向下遍历数组,统计找到的值出现的次数,当下一个值与要查找的值不匹配时则停止计数。*第二个循环向上遍历数组,统计找到的值出现的次数,当下一个值与要查找的值不匹配时则停止计数。* */function count(arr, data) { var count = 0; var 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;}var nums = [90,43,49,15,23,2,70,23,20,95,69,23,29,26];var list = qSort(nums);console.log(list);var findnum = 23;console.log("需要查找的数据为: " + findnum);var retVal = binSearch(list, findnum);if (retVal >= 0) { console.log( "找到 " + findnum + "的位置为: "+retVal);}else { console.log(" is not in array.");}console.log(findnum + "重复次数为"+count(list, findnum));使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码,可得如下运行结果:
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JavaScript数据结构与算法之检索算法。分享给大家供大家参考,具体如下:javascript数据结构与算法---检索算法(顺序查找、最大最小
C语言数据结构中二分查找递归非递归实现并分析前言:二分查找在有序数列的查找过程中算法复杂度低,并且效率很高。因此较为受我们追捧。其实二分查找算法,是一个很经典的
本文实例讲述了JavaScript使用二分查找算法在数组中查找数据的方法。分享给大家供大家参考。具体分析如下:二分查找又称折半查找,优点是比较次数少,查找速度快
本文实例讲述了JavaScript数据结构与算法之二叉树遍历算法。分享给大家供大家参考,具体如下:javascript数据结构与算法--二叉树遍历(先序)先序遍
php二分查找示例二分查找常用写法有递归和非递归,在寻找中值的时候,可以用插值法代替求中值法。当有序数组中的数据均匀递增时,采用插值方法可以将算法复杂度从中值法