LeetCode前置课-3-查找算法

1、二分查找

//二分查找,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]<num){//向右递归
            return binarySelect(arr,num,mind+1,right);
        }else{
            return mind;
            //如果数组中有多个相同的值,
            // 可以在此处放置List,查到后向左向右遍历是否有相同的值,并放入List返回,直到遍历完或不等于要查找的值后返回
        }
    }

2、插值查找:

//插值查找,插值查找避免了要查找的值在数组两边的多次查找的情况,和二分查找不同的是修改了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]<num){//向右递归
            return insertValueSearch(array,num,mind+1,right);
        }else{
            return true;
        }
    }

3、

//斐波那契(黄金分割法)查找,和二分法不同的是mind遵循黄金分割:一部分与全长之比等于另一部分与这部分之比,约等于0.618,要先构建菲波那切数组
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章