查找算法

顺序(线性)查找

 public static int seqSearch(int[] arr,int val){
        for(int i=0;i

二分查找(有序数组)

 public static int binarySearch(int[] arr,int val){
        return binarySearch(arr,0,arr.length-1,val);
    }
    public static int binarySearch(int[] arr,int left,int right,int val){
       if(left>right||valarr[arr.length-1])
            return -1;
        int mid=(left+right)/2;
        if(val>arr[mid])
            return binarySearch(arr,mid+1,right,val);
        else if(val

插值查找

 public static int insertValueSearch(int[] arr,int val){
        return insertValueSearch(arr,0,arr.length-1,val);
    }
    public static int insertValueSearch(int[] arr,int left,int right,int val){
        if(left>right||valarr[arr.length-1])
            return -1;
        int mid=left+(val-arr[left])*(right-left)/(arr[right]-arr[left]);
        if(val>arr[mid])
            return insertValueSearch(arr,mid+1,right,val);
        else if(val

斐波那契查找(黄金分割法)*

public static int[] fib(){
        int[] f=new int[maxSize];
        f[0]=1;
        f[1]=1;
        for(int i=2;if[k]-1)
            k++;

        int temp[]= Arrays.copyOf(arr,f[k]);
        for(int i=high-1;itemp[mid]){
                low=mid+1;
                k-=2;
            }
            else
            {
                if(mid<=high)
                    return mid;
                else
                    return high;
            }
        }
        return -1;
    }

你可能感兴趣的:(查找算法)