您的位置:首页 > 编程语言 > Java开发

java中的折半查找(二分查找)

2013-07-26 21:37 232 查看
(二分查找只适合有序数组)

查找有序数组中某个数在数组中的位置(角标)

public class ArrayFind {

    public static void main(String[] args) {

        int[] arr = {12,23,34,45,56,67,78};

        int a=halfSearch2(arr,34);

        System.out.println(a);

    }

    //折半查找(二分查找)

    public static int halfSearch(int[] arr,int key){

        int max=arr.length-1;

        int min=0;

        int mid = (min+max)/2;

        while(arr[mid]!=key){

            if(key>arr[mid]){

                min=mid+1;

            }else if(key<arr[mid]){

                max=mid-1;

            }

            if(max<min)

                return -1;

            mid=(max+mid)/2;

        }

        return mid;
    }

 //方法二

    public static int halfSearch2(int[] arr,int key)

    {

        int max,min,mid;

        min = 0;

        max = arr.length-1;

        while(min<=max)

        {

            mid = (max+min)>>1;   //右移1位相当于该数据除以2的一次方

            if(key>arr[mid])

                min = mid + 1;

            else if(key<arr[mid])

                max = mid - 1;

            else

                return mid;

        }

        return min-1;

    }

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