美文网首页
二分查找

二分查找

作者: 不会游泳的金鱼_ | 来源:发表于2019-08-06 17:53 被阅读0次

二分法查找的原理很简单,先和中间的比较,如果等于就直接返回,如果小于就在前半部分继续使用二分法进行查找,如果大于则在后半部分继续使用二分法进行查找。适用于数据量大大场景,但是要求数据有序。

public class BinarySearch {
    
    public static int search(int[] arr,int target) {
        if(arr == null || arr.length <= 0) return 0 ;
        int low = 0;
        int high = arr.length - 1;
        while(low < high) {
            int mid = (low + high) >> 1;
            if(arr[mid] == target) return mid;
            if(target < arr[mid]) {
                high = mid - 1;
            }
            if(target > arr[mid]) {
                low = mid + 1;
            }
        }
        return 0;
    }
}

改进版:插值查找

当我们知道要查找的数据大概在什么位置的时候,就没必要从中间找了。插值查找和普通的二分查找的区别就在于中间值的选择。

    public static int insertSearch(int[] arr, int target) {
        if(arr == null || arr.length <= 0) return 0 ;
        int low = 0;
        int high = arr.length - 1;
        while(low < high) {
            if(low == high) {
                if(arr[low] == target) {
                    return low;
                }
                return -1;
            }
            int mid = low + ((target - arr[low])/(arr[high] - arr[low]))* (high - low);
            if(arr[mid] == target) return mid;
            if(target < arr[mid]) {
                high = mid - 1;
            }
            if(target > arr[mid]) {
                low = mid + 1;
            }
        }
        
        return -1;
    }

相关文章

网友评论

      本文标题:二分查找

      本文链接:https://www.haomeiwen.com/subject/lziwdctx.html