LeetCode前置课-3-查找算法

LeetCode前置课-3-查找算法_第1张图片

1、二分查找

LeetCode前置课-3-查找算法_第2张图片

//二分查找,num是要查找的值
    public static  int  binarySelect(int[] arr, int num ,int left,int right){
        if(left>right){
            return -1;
        }
        int mind = (right+left)/2;
        if(arr[mind]>num){//向左递归
            return binarySelect(arr, num, left, mind-1);
        }else if(arr[mind]

2、插值查找:

LeetCode前置课-3-查找算法_第3张图片

//插值查找,插值查找避免了要查找的值在数组两边的多次查找的情况,和二分查找不同的是修改了mind中间值的计算公式,
    // 数组分布均匀的用插值查找比较好,不均匀的不一定比二分好
    public static boolean insertValueSearch(int[] array, int num ,int left ,int right){
        if(left>right){
            return false;
        }
        int mind = left+(right-left)*(num-array[left])/(array[right]-array[left]);//和二分法不同的地方
        if(array[mind]>num){//向左递归
            return insertValueSearch(array, num, left, mind-1);
        }else if(array[mind]

3、

//斐波那契(黄金分割法)查找,和二分法不同的是mind遵循黄金分割:一部分与全长之比等于另一部分与这部分之比,约等于0.618,要先构建菲波那切数组

你可能感兴趣的:(数据结构与算法,算法)