二分查找算法(Java实现)

①适用于经常查找的、但是不变的(增删)的有序列表。

 

②原理图

③测试代码:

//二分查找测试类
//注意:二分查找必须用在有序列表中进行二分查找
public class BinaryChopTest {

    public static void main(String[] args) {
            int[]arrays= {1,6,10,11,12,100};
            for(int i=0;i<=10;i++) {
                int sign=recursionBinarySearch(arrays,i,0,arrays.length-1);
                if(sign==-1) {
                    System.out.println("在数组中找不到"+i+"这个元素");
                }else {
                    System.out.println("目标元素"+i+"在数组的第"+sign+"位置");
                }
                sign=-1;
            }
    }

    /**
     * 使用二分查找和递归的结合进行查找
     * 时间复杂度:O(logN)
     * @param arrays    有序数组
     * @param target    要查找的元素(目标元素)
     * @param low        最低位
     * @param high        最高位
     * @return            找到的位置
     */
    public static int recursionBinarySearch(int[]arrays,int target,int low,int high) {
        if(target<arrays[low]||target>arrays[high]||low>high) {
            return -1;
        }
        int middle=(low+high)/2;               //初始化中间位置的值
        if(arrays[middle]>target) {
            return recursionBinarySearch(arrays,target,low,middle-1);
        }else if(arrays[middle]<target){
            return recursionBinarySearch(arrays,target,middle+1,high);
        }else {
            return middle;
        }

    }

}
 

④测试结果

猜你喜欢

转载自blog.csdn.net/tree_ifconfig/article/details/81076796