我在java中进行二进制搜索。我希望数组和键值作为用户输入,所以我在这里使用扫描仪。
我已经编写了这段代码,但是当我将键值作为用户输入时,我无法理解为什么它不起作用。我知道什么是二进制搜索并且已经完成了Stack Overflow上的其他问题,但我的是编码如果有人可以提供帮助,我无法弄清楚的问题。我的代码是:
//Program for getting a key value doing Binary Search
import java.util.Scanner;
public class Bin_Search{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int a[] = new int[n];
for(int i =0; i<n; i++)
a[i]= scan.nextInt();
for(int i =0; i<n; i++)
System.out.print(a[i] + " ");
System.out.println("Enter the value you want to find");
int key = scan.nextInt();
Bin_Search bin = new Bin_Search();
System.out.println("position is" + bin.b_search(a,key));
}
//Method to perform binary search
public int b_search(int arr[], int key)
{
int n = arr.length-1;
int lo = 0;
int hi = n-1;
int mid = (lo+hi)/2;
while(lo<=hi)
{
if(a[mid]>key)
hi = mid-1;
else if(a[mid]<key)
lo = mid+1;
else
return mid;
}
return -1;
}
}
答案 0 :(得分:4)
你永远不会改变mid
,你将在无限循环中检查数组中的相同位置。您需要在循环的每次迭代中更改它
while(lo<=hi)
{
if(a[mid]>key)
hi = mid-1;
else if(a[mid]<key)
lo = mid+1;
else
return mid;
mid = (lo+hi)/2;
}
顺便说一下,你错过了数组中的最后一项
int n = arr.Length - 1;
int hi = n - 1;
方法hi
实际上是arr.Length - 2
。只是做
int hi = arr.Length - 1;