二分查找算法-递归-非递归实现

package sorttest;
/**
*名称:BinarySearch
*功能:实现了折半查找(二分查找)的递归和非递归算法.
*说明:
*     1、要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integer、String等.
*     2、非递归查找使用search();,递归查找使用searchRecursively();
*
*本程序仅供编程学习参考
*
*/
class BinarySearch<T extends Comparable<T>> {
    private T[]  data;//要排序的数据

    public BinarySearch(T[] data){
        this.data = data;
    }
    /**
     * 非递归查找
     */
    private 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;
            System.out.println("mid " + mid + "===== mid value:" + data[mid]);///
            
            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;
    }

    /**
     * 递归查找
     */
    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]);
            System.out.println("mid " + mid + "===== mid value:" + 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;
    }

    public int searchRecursively(T key){
        if(data ==null) return -1;

        return doSearchRecursively(0 , data.length - 1 , key);
    }

    public static void main(String[] args){
    	/*
        Integer[] data = {1 ,4 ,5 ,8 ,15 ,33 ,48 ,77 ,96};
        BinarySearch<Integer> binSearch = new BinarySearch<Integer>(data);
        //System.out.println("Key index:" + binSearch.search(33) );

        System.out.println("Key index:" + binSearch.searchRecursively(1) );
		*/
    	
        String [] dataStr = {"A" ,"C" ,"F" ,"J" ,"L" ,"N" ,"T"};
        BinarySearch<String> binSearch = new BinarySearch<String>(dataStr);
        System.out.println("Key index:" + binSearch.search("F") );
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值