Hint til oppgave 5

Boken har generelle tips til programmering av binærsøk. I denne oppgaven var det imidlertid en tilleggsutfordring: Ved søk etter element som ikke finnes, skal metoden finnPos returnere et negativt tall.

Dette er nyttig i forbindelse med innsetting og sletting. Vi kan bruke binærsøk for effektivt å avgjøre om operasjonen lar seg gjennomføre. Men hvordan skal vi "kode" at en gitt verdi ikke finnes?

Se på følgende heltallstabell:

271442768400
01234567

La oss si at vi i tillegg til selve tabellen har en variabel nesteLedige som her vil ha verdien 6. Den logiske tabellen går altså fra og med posisjon 0 til og med posisjon 5.

Ved søk etter verdier som finnes, skal posisjonen til tallet returneres. F.eks. skal finnPos(14) returnere 2 og finnPos(84) returnere 5. Merk spesielt at finnPos(2) skal returnere 0.

Ved søk etter tall som ikke finnes i tabellen, er planen å returnere et negativt tall som peker ut hvor tallet kan settes inn - slik at tabellen fortsatt er sortert (alle større tall må selvsagt flyttes én posisjon lenger ut).

En grei løsning er da å la -1 peke ut den første posisjonen (altså 0), la -2 peke ut den andre posisjonen (altså 1) osv. Husk at returverdi 0 fra finnPos betyr at søket var vellykket!

Eksempel: Vi skal sette inn tallet 8 i tabellen over, og kaller finnPos(8) for å finne riktig posisjon.

Du skal programmere en søkemetode mot en referansetabell av type Ansatt[]. Prinsippet blir det samme, tenk at tallene i eksempelet over er ansattnumre.