代码的所有其他部分都得到执行,但在执行二进制搜索时出现了问题。我所做的算法是正确的,但它总是给我相反的答案。我不明白代码里发生了什么。甚至当我执行程序并告诉代码搜索数组中存在的元素时。线性搜索给我正确的答案,即元素存在,但当它进入二进制搜索时,它说元素不存在。
import java.util.*;
public class VOperations {
int n,first,last;
void intializer(int Arr[]){
n=Arr.length;
}
void show(int Arr[])
{
for (int i=0; i<n; ++i)
System.out.print(Arr[i] + " ");
System.out.println();
}
void linearSearch(int s,int Arr[]){
int c =0;
for(int i=0;i<n;i++){
if(Arr[i]==s){
c++;
}
}
if(c==1)
System.out.println("Element found");
else
System.out.println("Not found");
}
int binSearch(int Arr[], int x)
{
int l = 0, r = Arr.length - 1;
while (l <= r) {
int m = l + (r - l) / 2;
if (Arr[m] == x)
return m;
if (Arr[m] < x)
l = m + 1;
else
r = m - 1;
}
return -1;
}
void bubbleSort(int Arr[])
{
int n = Arr.length;
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (Arr[j] > Arr[j+1])
{
int temp = Arr[j];
Arr[j] = Arr[j+1];
Arr[j+1] = temp;
}
show(Arr);
}
}
class Test3{
public static void main(String args[]){
VOperations ob=new VOperations();
Scanner sc=new Scanner(System.in);
System.out.println("Enter the number you want to search :");
int x = sc.nextInt();
int Arr[] = { 11,6,77,8,5,44,6,9,442,86,73,49,68,82 };
ob.intializer(Arr);
ob.show(Arr);
int result = ob.binSearch(Arr, x);
if (result == -1)
System.out.println("Element not present");
else
System.out.println("Element found at "
+ "index " + result);
ob.linearSearch(x, Arr);
ob.bubbleSort(Arr);
sc.close();
}
}
二分查找只适用于排序的输入。您的数组最初不是有序的,并且当您尝试二进制搜索时还没有对它排序。
线性搜索没有相同的约束。