您的位置:首页 > 教育 > 锐评 > 延吉网站开发公司_网站推广公司电话_英国搜索引擎_重庆seo优化

延吉网站开发公司_网站推广公司电话_英国搜索引擎_重庆seo优化

2025/8/5 5:33:26 来源:https://blog.csdn.net/2301_80092823/article/details/146162571  浏览:    关键词:延吉网站开发公司_网站推广公司电话_英国搜索引擎_重庆seo优化
延吉网站开发公司_网站推广公司电话_英国搜索引擎_重庆seo优化

搜索算法就是找想要元素的下标

顺序搜索

将每一个元素和要找的元素比较,最低效

  //顺序搜索function searcn(arr,val){
for(let i=0;i<arr.length;i++){if(val===arr[i]){return i}return -1
}}

二分搜索

从按从小到大的数组中最中间的数开始找,如果大就往右边,小就往左边。

  function binarySearch(find,arr,start,end){}

需要在函数中传入三个参数,分别是要找的数,数组,开始数字和结束数字。以为最中间的数是开头和结尾的索引值end和start相加除以2再加start的索引值

      function quickStore() {const { length } = arrif (length < 2) {return arr}let base = arr[0]let minArr = arr.slice(1).filter(item => item >= base)let maxArr = arr.slick(1).filter(item => item < base)return quickStore(minArr).contact(base).contact(quickStore(maxArrft))}function binarySearch(find,arr,start,end){start=start||0end=end||arr.length-1arr=quickStore(arr)if(start<=end){if(arr[start]===find)return startif(arr[end]===find)return end}return -1}searcn([5,4,2,5,1,6,7],6)

封装一个快速排序的算法提前排好arr,处理找到数刚好是开头或者尾部的数

找到中间值:

let mid=(end-start)/2+start

设start为x,end结尾为y (x-y)/2+x=x/2+y/2

所以可以简化为

    let mid=Math.ceil((end+start)/2)

完整代码

  function binarySearch(find,arr,start,end){start=start||0end=end||arr.length-1arr=quickStore(arr)if(start<=end&&find>=arr[start]&&find<=arr[end]){if(arr[start]===find)return startif(arr[end]===find)return end}let mid=Math.ceil((end+start)/2)if(arr[mid]==find){return mid }else if(arr[mid]>find){
return binarySearch(find,arr,start,mid)}else if(arr[mid]<find){return binarySearch(find,arr,mid+1,end)}return -1}binarySearch([5,4,2,5,1,6,7],6)

内插搜索

改良版的二分搜索,二分总是检查mid位置上的值,而内插搜索根据要搜索的值检查数组中的不同地方,针对数字分布均匀的数,也需要提前按从小到大排好数组中的数字,和二分搜索差不多,只需要修改一句:把mid中间值改为

    let mid=start+Math.floor(find -arr[start])/(arr[end]- find)*(end-start)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com