当前位置 : 主页 > 编程语言 > c++ >

java实现二分查找两种方法

来源:互联网 收集:自由互联 发布时间:2021-06-30
java实现二分查找两种方法 详细说明参考:http://blog.csdn.net/maoyuanming0806/article/details/78176957 /** * 使用递归的二分查找 *title:recursionBinarySearch *@param arr 有序数组 *@param key 待查找关键字 *@r
java实现二分查找两种方法
详细说明参考:http://blog.csdn.net/maoyuanming0806/article/details/78176957
   
   /** 
     * 使用递归的二分查找 
     *title:recursionBinarySearch 
     *@param arr 有序数组 
     *@param key 待查找关键字 
     *@return 找到的位置 
     */  
    public static int recursionBinarySearch(int[] arr,int key,int low,int high){  
          
        if(key < arr[low] || key > arr[high] || low > high){  
            return -1;                
        }  
          
        int middle = (low + high) >>> 1;          //初始中间位置  
        if(arr[middle] > key){  
            //比关键字大则关键字在左区域  
            return recursionBinarySearch(arr, key, low, middle - 1);  
        }else if(arr[middle] < key){  
            //比关键字小则关键字在右区域  
            return recursionBinarySearch(arr, key, middle + 1, high);  
        }else {  
            return middle;  
        }     
          
    }  
    
    
    
    
    方法二:
        /** 
     * 不使用递归的二分查找 
     *title:commonBinarySearch 
     *@param arr 
     *@param key 
     *@return 关键字位置 
     */  
    public static int commonBinarySearch(int[] arr,int key){  
        int low = 0;  
        int high = arr.length - 1;  
        int middle = 0;         //定义middle  
          
        if(key < arr[low] || key > arr[high] || low > high){  
            return -1;                
        }  
          
        while(low <= high){  
            middle = (low + high) >>> 1;  
            if(arr[middle] > key){  
                //比关键字大则关键字在左区域  
                high = middle - 1;  
            }else if(arr[middle] < key){  
                //比关键字小则关键字在右区域  
                low = middle + 1;  
            }else{  
                return middle;  
            }  
        }  
          
        return -1;      //最后仍然没有找到,则返回-1  
}
上一篇:java实现希尔排序
下一篇:BigDecimal简介
网友评论