Бинарный поиск 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); 
    } 
} 

Спасибо


Ответы (0 шт):