数据结构与算法-二分查找

330 阅读1分钟

如何确定一个元素在数组中的位置?数组里存的全是整数。 1:如果是无序数组,从0开始一个个查找,平均时间复杂度为O(n) 2:如果是有序数组,可以使用二分查找,最坏时间复杂度为O(logn)

实现思路: 假设在[begin,end)范围内搜索元素kmid == (begin+end)/2mmid位置的数值。

  • 如果k<m,则去[begin,mid)范围内再次二分查找
  • 如果k>m,则取[mid+1,end)范围内再次二分查找
  • 如果k=m,直接返回mid

如图: 1:二分搜索流程图

代码如下:

public static int search(int[] array, int k) {
        int begin = 0;
        int end = array.length;
        while (begin < end) {
            int mid = (begin + end) >> 1;
            if (k > array[mid]) {
                begin = mid + 1;
            } else if (k < array[mid]) {
                end = mid;
            } else {
                return mid;
            }
        }
        return -1;
    }