Я работаю над программой, где я должен продемонстрировать работу алгоритма линейного и двоичного поиска. Для этого я получаю массив из 20 чисел и ключ поиска от пользователя. Код компилируется, и не возникает ошибок времени выполнения. Однако, когда я искать номера, скажем, 12, в массиве, вместо печати, что номер был найден в позиции 12, это говорит о том, что номер был найден в позиции 6:Логическая ошибка линейного и двоичного поиска
import java.util.*;
class prg14
{
int num [] = new int [20];
int search;
public void lin (int arr[], int a)
{
num = arr;
search = a;
int i;
int flag = 0;
for (i=0; i<num.length; i++)
{
if (search == num[i])
{
flag = 1;
break;
}
}
if (flag == 1)
{
System.out.println("Linear Search : ");
System.out.println(a+ " found at position " + (i + 1));
}
else
{
System.out.println("Linear Search : ");
System.out.print(a+ " not present in the list \n");
}
}
public void binary(int array[], int a)
{
int first = 0;
int n = 20;
int last = n - 1;
int middle = (first + last)/2;
while(first <= last)
{
if (array[middle] < search)
first = middle + 1;
else if (array[middle] == search)
{
System.out.println("Binary search : ");
System.out.println(search + " found at position " + (middle+1) + ".");
break;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if (first > last)
{System.out.println("Binary Search : ");
System.out.println(search + " not present in the list.\n");
}
}
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
prg14 obj = new prg14();
System.out.println("Enter any 20 numbers.");
String str;
int linn[] = new int[20];
int i;
for(i = 0; i<10; i++)
{
str = sc.next();
linn[i] = sc.nextInt();
}
System.out.println("Enter number to be searched.");
int search = sc.nextInt();
obj.lin(linn, search);
obj.binary(linn, search);
}
}
Как решить Эта проблема? ТИА.
Вы уверены, что значение 12 не находится в местоположении 6? Почему вы читаете только 10 значений? –
Binary Search работает в отсортированном массиве. Вы уверены, что ввод введен в порядке? – BatScream
И еще один момент: «if (array [middle] == search) ... print« found at middle + 1 »- why +1? - Но из этого массива if [middle] должен быть равен поиску, так что независимо от того, что он печатает, правильно (минус 1) – Ben