リニアテーブルルックアップ(シーケンスルックアップ、二分ルックアップ)

1853 ワード

1、順序検索(無秩序)2、折半検索(秩序配列でなければならない)
実装コード(java)
public class lineSearch {
    //    
    public static void main(String[] args) {
        //    
        int[] arr1 = {34,76,23,98,87,35,8,32,74,44};
        int key = 8;
        System.out.println(key+"      :"+search(arr1,8));//6

        //     (    )
        int[] arr2 = {1,2,3,4,5,6,7,8,9,10};

        //     
        System.out.println(key+"      :"+myBinarySearch(arr2,8));//7

        //    
        System.out.println(key+"      :"+myBinarySearch2(arr2,8));//7
    }

    /**
     *      :T(n) = O(logn)
     *      :S(n) = O(logn)
     *        
     * @param arr
     * @param key
     * @return
     */
    private static int myBinarySearch2(int[] arr, int key) {
        int low = 0;
        int high = arr.length;
        return binarySearch(arr,key,low,high);
    }
    //    
    private static int binarySearch(int[] arr, int key,int low,int high) {
        int mid = (low+high)/2;
        if(key == arr[mid]){
            return mid;
        }else if(key < arr[mid]){
            return binarySearch(arr,key,low,mid -1);
        }else if(key > arr[mid]){
            return binarySearch(arr,key,mid+1,high);
        }

        return -1;
    }

    /**
     *      : T(n) = O(logn)
     *      :S(n) = O(1)
     *         
     * @param arr
     * @param key
     * @return
     */
    private static int myBinarySearch(int[] arr, int key) {
        int low = 0;
        int high = arr.length;
        int mid = 0;

        while(low<=high){
            mid = (high + low)/2;
            if(key == arr[mid]){
                return mid;
            }else if (key