差值查找(二分查找plus)

本文对比了差值查找和二分查找两种算法,指出二分查找适用于数据分布均匀的情况,而差值查找在数据分布不均匀时能提供更精确的查找。在给定的示例中,当数组极度不均衡如{1,1,1,...,1,9}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

差值查找和二分查找的区别所在

二分查找:顾名思义每一次都是取得了数据的一半进行查找,在数据分布的相对比较均匀的时候,二分查找的效率还是很不错的。

 比如说这个数组:{1, 2,3 , 4 ,5 , 6 ,7 , 8 ,9 , 10}

查找里面的任意一个数组最多也就只会花费3次的分组
但是如果这个数组的分配是极其不均匀的,比如以下数组

  {1 , 1 ,1 , 1 ,1 , 1 ,1 , 1 ,1 , 1 ,9}

我们希望能够以更少的次数就可以找到这个数据9(当然二分查找是完全没有问题的),此时就是差值查找所要解决的事情了,二分查找每次都是分了一半。差值就是每次都分的更加的精确

差别所在

二分查找 mid = left + (right - left)/2
差值查找 mid = left + (right - left)*(findValue - nums[left] )/(nums[right] - nums[left])

二分查找代码:

 private static int binarySearch(int[] arr, int left, int right, int findval) {
        //如果左索引大于右索引,结束循环,因为没有找到
        if (left > right){
            return -1;
        }
        //声明变量
        int mid = (left + right) / 2;
        if (arr[mid] < findval){
           return binarySearch(arr,mid + 1 ,right,findval);
        }else if (arr[mid] > findval){
            return binarySearch(arr,left,mid - 1,findval);
        }else {
            return mid;
        }
    }

差值查找代码

 private static int insertValueSearch(int[] arr, int left, int right, int findVal) {
        System.out.println("差值查找的次数~~");
        if (left > right || findVal < arr[left] || findVal > arr[right]){
            return -1;
        }
        int mid = left + (right - left)*(findVal - arr[left])/(arr[right] - arr[left]);
        int midVal = arr[mid];
        if (findVal > midVal){
            return insertValueSearch(arr,mid + 1,right,findVal);
        }else if (findVal < midVal){
            return insertValueSearch(arr,left,mid - 1,findVal);
        }else {
            return mid;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值