Java 在排序数组中查找索引

Java 在排序数组中查找索引,java,arrays,binary-search,Java,Arrays,Binary Search,一个基本问题是,给定一个排序数组和一个目标值,如果找到了目标,就查找索引。如果不是,则返回按顺序插入的索引。 以下是我的方法: public int searchInsert1(int[] A, int target) { if (A == null || A.length == 0) return 0; return search(A, target, 0, A.length); } public int search(int[] a, int target,

一个基本问题是,给定一个排序数组和一个目标值,如果找到了目标,就查找索引。如果不是,则返回按顺序插入的索引。 以下是我的方法:

public int searchInsert1(int[] A, int target) {
    if (A == null || A.length == 0)
        return 0;
    return search(A, target, 0, A.length);
}
public int search(int[] a, int target, int s, int e) {
    if (s == e)
        return s;
    int mid = (s + e) / 2;
    if (a[mid] == target) {
        return mid;
    } else if (target < a[mid]) {
        return search(a, target, 0, mid - 1);
    } else {
        return search(a, target, mid, e);
    }
}

有人能详细地帮我吗?提前非常感谢

您的代码在以下部分有错误: 1.您将结束索引设置错误,它应该是:A.length-1; 2.条件部分中的返回值错误,其他部分中的返回值应为:searcha、target、0、mid+1、e

正确的代码应为:

    public int searchInsert1(int[] A, int target) {
        if (A == null || A.length == 0)
            return 0;

        // check if target is larger than the largest value or smaller than the smallest value
        if (target < A[0])
            return 0;
        else if (target > A[A.length-1])
            return A.length-1;

        return search(A, target, 0, A.length-1);
    }

    public int search(int[] a, int target, int s, int e) {
        if (s == e)
            return s;
        int mid = (s + e) / 2;
        if (a[mid] == target) {
            return mid;
        } else if (target < a[mid]) {
            return search(a, target, 0, mid - 1);
        } else {
            return search(a, target, mid+1, e);
        }
    }
使用这种方法

 public int search(int[] a, int target, int s, int e) {
     int low = s;
     int high = e- 1;

     while (low <= high) {
        int mid = (low + high) >>> 1;
        int midVal = a[mid];

        if (midVal < target)
            low = mid + 1;
        else if (midVal > target)
            high = mid - 1;
        else
            return mid; // key found
     }
     return -(low + 1);  // key not found.
  }

这是我用Java编写的最简单的解决方案


*…如果找到目标,则查找索引。如果不是,则返回按顺序插入的索引位置。。。那你怎么知道它是否被发现了?你真正的问题是什么?显然,你有工作代码。如果您想知道为什么它工作而另一个不工作,那么您肯定可以从调试器中找到答案?这就是问题所在吗?看起来很明显-在第一个版本中,如果目标值小于中间值,则搜索数组的上半部分。显然,如果target小于中间值,并且数组按升序排序,则需要搜索数组的下半部分。是否熟悉Arrays.binarySearch方法?首先,可以使用0和length作为参数调用该方法。所以e参数是上限,不包括在内。但是当target public int search(int[] a, int target, int s, int e) { int low = s; int high = e- 1; while (low <= high) { int mid = (low + high) >>> 1; int midVal = a[mid]; if (midVal < target) low = mid + 1; else if (midVal > target) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. }
public static int search(int[] a, int target) {

    for (int i = 0; i < a.length; i++) {

        if (a[i] == target) {

            return i;

        }


    }
    return -1;
}