# Suchalgorithmen



## SolvencyII (26. Mrz 2017)

Hi,
dank eurer Hilfe habe ich es mittlerweile geschafft mein Array zu sortieren.

Auf diesem Array habe ich abfragen, die momentan noch von oben nach unten bspw. Gleichheit einer Eigenschaft eines Objekts abfragen und wollte eine effiziente Suche einbauen.

Meine Frage hierbei ist 

1. gibt es effiziente Suchen, wenn die Suche mehr als 1 Ergebnis liefern soll? Ich habe mir viele Algorithmen angeguckt, die aber alle nur darauf ausgelegt sind ein Objekt zu liefern.

2. Habe ich jetzt erstmal die binäre Suche angeschaut, der Code lautet


```
public int binarySearch(int[] a, int x) {
        int k; // variable to hold the index or -1
        int i,j; // lower and upper array bounds
        i = 0;
        j = a.length - 1; // initial array bounds
        while (i <= j) {
        k=(i+j)/2; //choosekinthemiddle
            if (a[k] == x) return k; // found x
                if(x<a[k]) j=k-1;
                else i = k + 1; // update bounds
        }
        return -1;
    }
```
Meine Frage ist nun wie ich diese auf meinem Array "flughaefen" laufen lasse?

```
// Frage den Benutzer nach dem Airportcode des gesuchten Flughafens
out.print("\nSuche Airport mittels Airportcode. Gebe hierzu den Airportcode ein (bspw. ZRH für Zurich Airport):  ");
String eingabe = input.next();

// Zeige den (original) Datensatz (=Flughafen), der diesen Airportcode hat
out.println("\nResultat:");

binarySearch(flughaefen, eingabe)
```
funktioniert nämlich nicht. Zur Erklärung kann ich weiterhin sagen, dass der airportcode eine Eigenschaft eines Objekts Flughafen ist


```
// Konstruktor. Wir haben uns entschieden, die eingelesene Zeile hier zu zerlegen und in die einzelnen Felder aufzuteilen.
    Flughafen(String zeile) {

        // Zerlege die einzelne Zeile in Spalten (separiert durch ",")
        String[] felder = zeile.split(",");

        // Lese den Flughafennamen ein. Entferne die "double-quotes".
        this.airport = String.valueOf(felder[3]);
        this.airport = this.airport.replace("\"", "");

        // Lese den Airpordcode ein, sofern er existiert (!). Entferne die "double-quotes".
        if (felder.length > 13) {
            this.airportcodes = String.valueOf(felder[13]);
            this.airportcodes = this.airportcodes.replace("\"", "");
        }
...
```

Danke vorab


----------



## SolvencyII (26. Mrz 2017)

Also ich weiß natürlich, dass 

```
binarySearch(flughaefen, eingabe)
```
so garkeine Sinn macht. Wir wollen ja nicht das ganze Array flughaefen durchsuchen, sondern bloß die airportcodes. Jedoch funktioniert

```
binarySearch(flughaefen.airportcodes, eingabe)
```
genauso wenig..


----------

