Deine Frage-Antwort-Community
Frage stellen
    • Meinung des Tages: Wird die Epstein-Affäre Trump zum Verhängnis?
    • Was dürfen Frauen bei der Bundeswehr nicht?
    • Wenn du angebettelst wirst, wem gibst du was?
    • Warum feiern wir Individualität, aber hassen alles, was aus der Norm fällt?
    • Künstliche Intelligenz: Hilfe oder Gefahr für unseren Alltag?
    • Handy am Bett - wie macht ihr das vor dem einschlafen? Schaltet ihr das aus wegen der Strahlung?
    • Alle Beiträge
    • Radiokooperation mit Absolut HOT 🔥
    • Meinung des Tages
    • Themenspecial: Polizei (mit BKA-Kriminaldirektor Andy Neumann) 🚓
    • Blickwechsel: Deine Fragen an einen Schiedsrichter im Amateurfußball
    • Ask Me Anything:
      Alle Blickwechsel
    • Ask Me Anything:
      Alle Themenspecials
    • gutefrage Tipps
    • gutefrage Highlights
    • Computer
    • Internet & Social Media
    • Kreativität, Freizeit & Hobby
    • Lokales, Reiseziele & Urlaub
    • Medien, Unterhaltung & Musik
    • Mode & Beauty
    • Software & Apps
    • Spiele & Gaming
    • Sport & Fitness
    • Alle Themenwelten
In wenigen Minuten
Antworten auf Deine Fragen.
Frage stellen
Du hast noch kein gutefrage Profil? Jetzt kostenlos erstellen
Profil Beiträge Antworten Antworten

3DOT14159265358

20.11.2018
Übersicht
0
Hilf. Antw.
1
Antwort
5
Beiträge
0
Danke
1
Komplim.
1
Freunde
Erfolge

Geistesblitzer

Erste Antwort gegeben.

FraGenius

Erste Frage gestellt.
3DOT14159265358
04.12.2018, 01:22
Binäre Suche: Iterativ vs rekursiv?

Ich habe beides in Java implementiert, verstehe aber nicht, warum die rekursive Variante mehr als doppelt so schnell ist. Müsste es normalerweise nicht anders herum sein? Oder habe ich bei der iterativen Variante irgendetwas suboptimal gelöst?

public static int binarySearchIterative(int[] a, int z) {
  int left = 0;
  int right = a.length - 1;

  while (left <= right) {
    int midpoint = (int)((left + right) / 2);

    if (z == a[midpoint]) {
      return midpoint;
    }

    if (z < a[midpoint]) {
      right = midpoint - 1;
    }
    else {
      left = midpoint + 1;
    }
  }

  return -1;
}

public static int binarySearchRecursive(int[] a, int z, int left, int right) {
  int midpoint = (int)((left + right) / 2);

  if (right < left) {
    return -1;
  }

  if (z == a[midpoint]) {
    return midpoint;
  }

  if (z < a[midpoint]) {
    return binarySearchRecursive(a, z, left, midpoint - 1);
  }
  else {
    return binarySearchRecursive(a, z, midpoint + 1, right);
  }
}
...zum Beitrag
Antwort
von 3DOT14159265358
04.12.2018, 01:23

Besser so: https://pastebin.com/utkBFGuA

...zur Antwort
gutefrage
  • Beitrag erstellen
  • Stöbern
  • Alle Themen
  • Hilfe / FAQ
  • Richtlinien
  • gutefrage Highlights
Partner
  • Businesspartner
  • Partner werden
Unternehmen
  • Über uns
  • Jobs
  • Kontakt
  • Presse
Rechtliches
  • Impressum
  • Datenschutz
  • AGB
  • Utiq verwalten
Weil es immer jemand weiß.
gutefrage ist so vielseitig wie keine andere Frage-Antwort-Plattform. Bei uns findest Du schnell neue Perspektiven - egal zu welchem Thema.
Gmacht in Minga. Mit
❤
Facebook Pixel