Arrays binarySearch

Odpowiedz Nowy wątek
2020-01-24 17:36

Rejestracja: 3 miesiące temu

Ostatnio: 2 tygodnie temu

0

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

edytowany 1x, ostatnio: Michal Omi, 2020-01-24 17:37

Pozostało 580 znaków

2020-01-24 17:42

Rejestracja: 10 miesięcy temu

Ostatnio: 3 godziny temu

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).


"Ktoś sobie uświadomił, że pisał pod pseudonimem rzeczy, które lepiej żeby w firmie nie wypatrzyli :-)"

"- Ledwo na studiach 3 tydzień się kończy i już ciężko?
- Niestety prowadzący jest dziwny i robi kartkówki"
edytowany 1x, ostatnio: BraVolt, 2020-01-24 19:05

Pozostało 580 znaków

2020-01-25 09:32

Rejestracja: 3 miesiące temu

Ostatnio: 2 tygodnie temu

0

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

System.out.println(liczby[4]) - BraVolt 2020-01-25 09:48

Pozostało 580 znaków

2020-01-25 10:33

Rejestracja: 3 miesiące temu

Ostatnio: 2 tygodnie temu

0

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

Pozostało 580 znaków

2020-01-25 11:02

Rejestracja: 1 rok temu

Ostatnio: 3 tygodnie temu

1

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

edytowany 1x, ostatnio: Orenz12, 2020-01-25 11:06

Pozostało 580 znaków

2020-01-25 11:11

Rejestracja: 10 miesięcy temu

Ostatnio: 3 godziny temu

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.


"Ktoś sobie uświadomił, że pisał pod pseudonimem rzeczy, które lepiej żeby w firmie nie wypatrzyli :-)"

"- Ledwo na studiach 3 tydzień się kończy i już ciężko?
- Niestety prowadzący jest dziwny i robi kartkówki"

Pozostało 580 znaków

2020-01-25 11:17

Rejestracja: 14 lat temu

Ostatnio: 3 minuty temu

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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 4x, ostatnio: Wibowit, 2020-01-25 11:40

Pozostało 580 znaków

2020-01-26 17:24

Rejestracja: 3 miesiące temu

Ostatnio: 2 tygodnie temu

0

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

w niedziele wieczorem życzyć miłego weekendu :( - danek 2020-01-26 18:03

Pozostało 580 znaków

Odpowiedz

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