对于未找到元素的二进制搜索,如何返回应插入的索引

时间:2011-11-19 23:39:42

标签: java algorithm

我想使用二进制搜索来查找元素应该放在的数组索引。这是为了在向下移动较大元素的同时将元素插入到数组中。如何修改这个二进制搜索以指定应该放置未找到元素的位置?

    int binarySearch(int arr[], int x) {

        int low = 0;
        int mid = 0;
        int high = arr.length - 1;
        while (low <= high) {
            mid = (low + high) / 2;
            if (x < arr[mid]) {
                high = mid - 1;
            } else if (x > arr[mid]) {
                low = mid + 1;
            } else {
                return mid;
            }
        }
        //This is what im trying to get to work
        if (x < arr[mid]) {
            return high;
        } else {
            return low;
        }
    }

感谢。

3 个答案:

答案 0 :(得分:4)

Arrays.binarySearch()返回-(insertion_point + 1)。这样,返回值≥0是命中并且返回值<1。 0是未命中,insertion_point = -return_value - 1

答案 1 :(得分:2)

看看java.util.Arrays.binarySearch()是如何做到的。

答案 2 :(得分:0)

查看C ++标准模板库中的lower_boundupper_bound。这些链接符合规范;这些实现位于同一网站的实现部分的stl_algo.h文件中,但我是新用户,因此不允许一次发布两个以上的URL。