又是一年又一年,后天赶车回家,今天有时间就以这篇文章结束猴年博客更新。回想今年过往,博客还是坚持了下来,习惯还在培养。希望鸡年有更高的提升。
搜索算法
说起数据结构我们就想到算法,生产工程中实际问题很多涉及到他,但对于前端来说很少有人去提到这一块,其实不然,算法是计算机的基础构建的核心,提高计算性能,减轻压力,算法起到至关重要的作用。
今天我们谈谈搜索相关的算法。
前端JS时长用到关于排重的操作,因此搜索去重是关键。怎么提高搜索的效率,需要一个好的算法进行优化。
算法介绍
顺序搜索
顺序搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。12345678910this.squentialSearch = function(item){for(var i=0;i<arr.length;i++){if(item == arr[i]){console.log('命中');}}return -1;}二分搜索法
二分搜索算法的原理和猜数字游戏类似。
这个算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。
(1) 选择数组的中间值。
(2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。
(3) 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找。 (4) 如果待搜索值比选中值要大,则返回步骤1并在选种值右边的子数组中寻找。
以下是其实现:123456789101112131415161718this.binarySearch = function(item){this.quickSort(); //首先对数组排序var low = 0,high = array.length - 1,mid, element;while (low <= high){mid = Math.floor((low + high) / 2);element = array[mid];if (element < item) {low = mid + 1;} else if (element > item) {high = mid - 1;} else {return mid;}}return -1;};
分析两个算法的时间复杂度如下
算法 | 数据结构 | 最差情况 |
---|---|---|
顺序搜索 | 数组和链表 | O(n) |
二分搜索 | 排好序的数组或二分搜索树 | O(log(n)) |