java实现二分查找法

来源:互联网 发布:win7精简优化版 编辑:程序博客网 时间:2024/05/22 13:51

二分查找法:

        我把他理解为折半排除法,就是把查找的范围分为两半,排除其中一半,把另一半再分成两半,再排除一半,再分两半,逐渐把范围缩小,直到找到需要查找的元素,或者判定没有这个元素。

        使用二分查找的前提是被查找的是个有序的序列。

        以整数型一维数组为例,查找数组中有没有某个数字

package Search;
/**
 *
 *查找数组{1;3;5;7;9;11;13;15}查找数组中有没有数字8,如果有并返回它的索引
 *普通的方法是遍历数组中所有的数来判断是否和8相等
 *二分法则是先把数组分从中间分成两半,可以理解为划分成两个数组,按照原数组的排序方式,判断8的范围在那个数字里
 *
 */
public class Search {
    public static void main(String[] args){
        int[] arr = new int[]{1,3,5,7,9,11,13,15};
        int n=8;
        //创建ChaZhao对象
        ChaZhao ch=new ChaZhao();
        //调用输出
        System.out.println(ch.chaZhao(arr,n));    
    }

}


package Search;

public class ChaZhao {
    //成员变量
    //定义变量first表示数组的首索引
    int first;
    //定以变量end表示数组的尾索引
    int end;
    //定义变量mid表示数组的中间索引
    int mid;
    public int chaZhao(int[] arr,int n){
        //把原数组的索引作为初始值赋给first,end;
        first=0;
        end=arr.length-1;
        //while循环,如果first与end相对,已经排除到了最后一个数
        while(first<end){
            mid=(first+end)/2;
            //先判断数组中间的数是否是n,如果相等直接返回mid
            if(arr[mid]==n){
                return mid;
            }
            //如果不等于中间的数,再判断n的范围,排除掉另一范围
            else if(n<arr[mid]){
                end=mid-1;
            }
            else{
                first=mid+1;
            }
        }
        //如果数组中查询不到则返回-1
        return -1;
    }
    

}







原创粉丝点击