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,要先構建菲波那切數組
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章