在Array中获取一个位置以插入使用二分搜索

时间:2018-01-31 21:02:24

标签: java

我可以用你的帮助。我正在尝试创建一个方法,可以对插入新元素的位置进行二进制搜索,在过程中使用自然顺序比较方法,我写的代码显然是错误的,我是新的写算法,只是不知道如何实现这一点。所以例如

int[] list = {10,15,20,25,30};

我希望插入17,我有另一种方法可以添加它但我需要通过二进制搜索和比较方法假设自然顺序进入的位置。在此先感谢您的帮助。这是我到目前为止,但当我尝试插入53时,它给出了位置4而不是5.任何建议?

public int getIndex(E element) {
    E e = (E)element;
    int low = 0;
    int high = this.size;
    int mid = 0;

    if(size == 0) {
        return 0;
    }

    while (low <= high) {
           mid = (high + low) / 2;
        if (list[mid]== null) {
            return mid;
        }

            if (compare(e, list[mid]) < 0) {
                high = mid - 1;
            } else if (compare(e, list[mid]) > 0) {
                low = mid + 1;
            } else {
                return (int) list[mid];
            } 


    }
    return mid;
}

1 个答案:

答案 0 :(得分:0)

因为您还没有发布任何代码,所以这里有一个提示:

  1. 从数组的中间索引开始。在你的情况下,这将是索引2,持有20。
  2. 我们可以看到20大于您想要插入的数字(17),因此我们导航到数组下半部分的中间索引({10, 15} - 在本例中为索引1)。
  3. 因为只有2个元素,所以我们首先检查更高元素的值(15)。
  4. 17大于15,所以我们想要导航到下一个更高的子阵列,但它是空的!
  5. 这意味着您已准备好在15之后的索引处插入您的值(17)(在这种情况下,17将放在索引2处)。
  6. 请记住,要使二进制搜索起作用,需要对数组进行排序。它不在你的例子中。