繁体   English   中英

我的二进制搜索算法实现有什么问题?

[英]What is wrong with my Binary Search algorithm implementation?

我为提出这么简单的问题而道歉。 但我很难过。 我想我已经使用正确的算法实现了解决方案,但由于某种原因,我在运行时遇到了stackoverlow错误。 有帮助吗?

public class BinarySearch {
public static void main(String[] args){
    int[] a = new int[]{1,3,5,9,10,100,210,423,500};
    System.out.println(binarySearch(a,5,0,a.length-1));
}
static int binarySearch(int a[], int x, int left, int right){
    if(left>right)
        return -1;
    int mid = left+right/2;

    if(a[mid] < x){
        return binarySearch(a,x,mid+1,right);
    }
    else if (a[mid] > x){
        return binarySearch(a,x,left,mid-1);
    }
    return mid;
}

当您计算mid的值时,您的范围不合适。

int mid = left+right/2

VS

int mid = (left+right)/2

虽然这是解决问题的简单方法,但您还应该查看Peter和Laune的建议。 它们都处理整数溢出。

如果数组的长度等于或接近Java中int数据类型的最大值,则可能会遇到一些问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM