Бинарный поиск java
Написал вот такой алгоритм бинарного поиска на Java:
int binarySearch(int arr[], int l, int r, int szukana)
{
if (r>=l)
{
int mid = l + (r - l)/2;
if (arr[mid] == szukana)
return mid;
if (arr[mid] > szukana)
return binarySearch(arr, l, mid-1, szukana);
return binarySearch(arr, mid+1, r, szukana);
}
return -1;
}
Мне сказали -
"Помните, что медиана - это не средний элемент. Вам вовсе не нужно заменять элемент, расположенный в середине вектора
Я так понял что они говорят про вот этот элемент int mid = l + (r - l)/2;Но как написать алгоритм по-другому я не знаю... Как быть?
Вставлю полный код для полноты картины...
//Бинарный поиск для рандомно написаного массива с шагом от 1 до +5 между цифрами.
//И считывание какой элемент хочешь найти с консоли (Scanner)
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class BinarySearch
{
// Zwraca indeks szukana, jeśli występuje w arr[l.. r].
int binarySearch(int arr[], int l, int r, int szukana)
{
if (r>=l)
{
int mid = l + (r - l)/2;
// Jeśli element jest obecny w samym środku
if (arr[mid] == szukana)
return mid;
// Jeśli element jest mniejszy od środka, wtedy może występować tylko w lewym podparcie
if (arr[mid] > szukana)
return binarySearch(arr, l, mid-1, szukana);
//W przeciwnym razie pierwiastek może występować tylko w podwarstwie prawej
return binarySearch(arr, mid+1, r, szukana);
}
//Docieramy tu, gdy element nie występuje w tablicy
return -1;
}
public static void main(String args[])
{ //tworzymy wektor z liczb losowych
int n = 100;
int[] arr = new Random().ints(n,1,5).toArray();
for (int i = 1; i < arr.length; i++) {
arr[i]+=arr[i-1];
}
Arrays.sort(arr);
System.out.println();
System.out.println("Wektor: " + Arrays.toString(arr));
Scanner scanner = new Scanner(System.in); //tworzymy obiekt klasy Scanner
int szukana;
System.out.print("Podaj liczbę całkowitą: ");
szukana = scanner.nextInt(); //pobieramy liczbę całkowitą
System.out.println("Podano liczbe: " + szukana);
BinarySearch ob = new BinarySearch(); // zwracamy się do pierwszej części (algorytmu), aby znaleźć liczbę w wektorze
int result = ob.binarySearch(arr,0,n-1,szukana);
if (result == -1)
System.out.println("Element nieobecny");
else
System.out.println("Element znaleziony w indeksie: " + result);
}
}
Спасибо