您的位置:首页 > 其它

二分搜索算法

2014-01-04 01:26 344 查看
/**

*今天我勉强搞懂了二分查找算法,我觉得很有收获,这是个不错的算法,希望还不知道、不懂二分算法的朋友能看看!!!

*二分查找

*二分查找的前提是数组一定是有序的

*传入一个数组 T []

* 传入一个查找元素 T key

*返回查找结果

*/

class MyUtil

{

    //在有序数组中查找特定元素的搜索算法 , 这种搜索算法每一次比较都使搜索范围缩小一半。

    public static <T extends Comparable<T>> int binarySerch(T [] x , T key){

        int low = 0; //低位变量,初始为 0

        int high = x.length - 1; // 高位变量,初始为传入数组的长度 - 1

        while(low <= high){

            //mid 是中间位,这里的中间位不能直接用(high+ low) / 2的方式,会造成 整数 越界。

            int mid = low + ((high -low) >> 1); //这里的异或运算的优先等级低于加减运算,所以要扩起来,不然会是死循环。

            if(key.compareTo(x[mid]) < 0){ // 当查找元素小于中间元素时

                high = mid -1;             //最高位就折半到了mid之前的位置

            }

            else if(key.compareTo(x[mid]) > 0){ //档查找元素大于中间元素时

                low = mid +1;                   //最高位就这般到了mid之后的位置

            }

            else{ //当查找元素等于中间位置的元素时

                return mid; // 返回找到的元素位置

            }

        }

        return -1; // 没找到就返回 -1

    }

    public static void main(String[] args)

    {

        Integer [] x = {1,2,3,4,5,6,7,8,9}; //有序的Integer数组

        int key = 3; //查找元素

        //String [] x = {"a","b","c","d","e","f","g","h","i","j"};//有序的String数组

        //String key = "f";//查找元素

        int num = binarySerch(x , key); //调用并得到返回的元素位置

        System.out.println(num);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 二分查找