Arrays binarySearch

0

Witam,
dlaczego po wpisaniu do Arrays.binarySearch(liczby, 6) wyswietlony jest wynik 5 a nie 6? (jak w zalaczniku)
Pozdrawiam!

4

Bo indeksujemy od 0
Bo 6 jest na pozycji 5.
Jest na pozycji 5, bo tablica [1,1,2,3,5,6] ma 6 elementów, a[0]=1, a[1]=1, a[2]=2. a[3]=3, a[4]=5, a[5]= 6
Znalezione 6 jest na pozycji a[5], jest to ostatnia, szósta pozycja sześcioelementowej tablicy (liczymy pozycję/index od 0 do 5).

0

Idac w tym kierunku dlaczego po wpisaniu 5, wyswietla mi liczbe 4 zamiast 3?
Sortowanie : [1, 1, 2, 3, 5, 6]

0

Chodzi mi o to ze tej 4 nie ma w tablicy, a jest wyswietlana.

1

Wpisując liczbę w binarySearch metoda zwraca pozycję (indeks) liczby w zbiorze, nie samą liczbę
https://www.geeksforgeeks.org/arrays-binarysearch-java-examples-set-1/amp/

0

Jeśliby po zapytaniu o liczbę miała zostać zwrócona ta liczba to byłaby to tylko odpowiedź true/false, czy liczba w tablicy jest albo jej nie ma.
Zwrócenie indeksu pod którym ta liczba jest przechowywana daje nie tylko odpowiedź, czy jest taka liczba w tablicy, ale daje też dostęp do tej liczby.

Na przykładzie samych liczb to może nie robić widocznej różnicy, ale gdyby zamiast liczbą (coś w rodzaju PESEL) była informacja o osobie, numer telefonu itd to zwrócenie samej informacji, że taki numer PESEL jest niewiele daje. Zwrócenie pozycji w tabeli pod którą znajduje się osoba daje dostęp do informacji o tej osobie.

Dlatego zwracana jest pozycja piątki (jest na pozycji 4) a nie sama piątka.
Zwrócenie 5 przypytaniu o 5 byłoby do uproszczenia na true/false (jest w tablicy 5 albo nie ma, jest 13 albo nie ma) i nic więcej.

0

Z dokumentacji Arrays.binarySearch:

Returns:
index of the search key, if it is contained in the array; otherwise, (-(insertion point) - 1). The insertion point is defined as the point at which the key would be inserted into the array: the index of the first element greater than the key, or a.length if all elements in the array are less than the specified key. Note that this guarantees that the return value will be >= 0 if and only if the key is found.

Taki kod ( https://www.ideone.com/Dci5TZ ):

import java.util.*;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		int[] ints = { 0, 2, 4, 6, 8 };
		int index = Arrays.binarySearch(ints, 5);
		System.out.println(index);
	}
}

Wypluwa -4 (co jest równe -3 - 1, gdzie 3 to insertion point), bo liczba 5 nie została znaleziona. Przy wstawianiu do tablicy powinna wejść na indeks 3, a elementy większe powinny być przesunięte w prawo.

0

Dzieki wszystkim za pomoc, zrozumialem! :) milego weekendu zycze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1