折半查找的递归实现和非递归实现



2、折半查找非递归实现:
    public int search(T key){
        int low;
        int high;
        int mid;

          // 没数据直接返回无结果
        if(data == null){
            
return -1; 
        }


          // 初始化大小游标
        low = 0;
        high = data.length - 1;

        while(low <= high){//  条件:大小游标尚未交错 
            mid = (low + high) / 2;
            
            if(key.compareTo(data[mid]) < 0){
                high = mid - 1;// 改变大游标的值,缩小范围为前半段
            }else if(key.compareTo(data[mid]) > 0){
                low = mid + 1;// 改变小游标的值,缩小范围为后半段
            }else if(key.compareTo(data[mid]) == 0){
                return mid;// 找到
            }
        }

        return -1;// 大小游标交错,无结果
    } 


3、折半查找递归写法:
    private int doSearchRecursively(int low , int high , T key){
        int mid;
        int result;

        if(low <= high){// 条件:大小游标尚未交错
            mid = (low + high) / 2;
            result = key.compareTo(data[mid]);
 
          
            if(result < 0){
                return doSearchRecursively(low , mid - 1 , key);// 改变大游标,递归前半段
            }else if(result > 0){
                return doSearchRecursively(mid + 1 , high , key);// 改变小游标,递归后半段
            }else if(result == 0){
                return mid;// 返回结果
            }
        }
        
        return -1;// 无结果
    } 


你可能感兴趣的:(数据结构与算法)