JS搜索算法(二分与插值)

17 篇文章 1 订阅

JavaScript 二分搜索与插值搜索法

基本流程
1.排序
2.(插值搜索)计算出里待搜索值相近的值(插值搜索)
2.(二分搜索)找出数组中,中间位置的值
3. 截取数组(递归或者循环)
4. 找值 找到了 返回 对应的值
5. 未找到值返回null

下面就是算法

// 1. 我才用的是快速排序算法,你也可以用其他的,这个无所谓
et string = [0, 16, 18, 16, 45, 55, 15, 17, 16]
    let l = 0
    let r = string.length - 1
    // 快速排序
    function sort(arrs, l, r) {
        let temp
        let i = l
        let j = r
        if(i < j) {
            while(i != j) {
                temp = arrs[i]
                while(j > i && arrs[j] >= temp) {
                    j--
                }
                arrs[i] = arrs[j]
                while(i < j && arrs[i] <= temp) {
                    i++
                }
                arrs[j] = arrs[i]
            }
            arrs[i] = temp
            // 排序左序列
            sort(arrs, l, i - 1)
            // 排序右序列
            sort(arrs, i + 1, r)
        }
    }
    sort(string, l, r)
	// 此时 string变量数组已经变成有序的了
	
	// 下面进行二分搜索或者插值搜索
	function binarySearch(arr, value) {
        // 核心代码 大概计算出可能出现的位置 
        let i = (value - arr[0]) % (arr[arr.length - 1] - 1)
        // (Math.floor((arr.length - 1) / 2)) 二分搜索算法
		//(二分搜索和插值搜索 区别就在于这个中间值怎么找)
        let middle = arr[i]
        // 找到值的出口
        if(middle == value) {
            return middle
        }
		// 下面开始递归切数组
        // 右边切
        if(value > middle) {
            return binarySearch(arr.slice(i + 1, arr.length), value)
        }
        // 左边切
        if(value < middle) {
            return binarySearch(arr.slice(0, i), value)
        }
        // 没有找到return null
        return null
    }

    console.log(binarySearch(string, 10))
	
	
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值