二分查找

107 阅读1分钟
```
/**
 * 二分查找
 * 二分查找的前提是一个有序数组,二分查找能够大大提高查找效率,他的时间复杂度是o(log2N) 以2为底,N的对数。
 * 实现:有序N个元素的数组,要查找x,第一次查找-剩余N/2,第二次查找-剩余N/4,第三次查找-剩余N/8,直到最后一次查找,剩余1
 * 假设查找了n次,那也就是说在2^n无限接近于N的时候才会找到,可以得出n=(以2为底N的对数)
 */
public class BinarySearch {
    public static void main(String[] args) {
        int[] toSearchArr = {1,2,3,4,5,6,7,8,9,10};
        int index = toSearchValue(toSearchArr,9);
        System.out.println("9的索引为"+index);
    }
    public static int toSearchValue(int[] arr, int value) {
        int leftIndex = 0;
        int rightIndex = arr.length - 1;
        int midIndex = 0;
        while(leftIndex < rightIndex) {
            midIndex = (leftIndex + rightIndex) / 2;
            if(arr[midIndex] == value) {
                return midIndex;
            }else if(arr[midIndex] > value) {
                rightIndex = midIndex - 1;
            }else if(arr[midIndex] < value) {
                leftIndex = midIndex + 1;
            }
        }
        return midIndex;
    }
}
```