Deine Frage-Antwort-Community
Frage stellen
    • Meinung des Tages: Reicht der Warntag aus, um Funktionen für den Ernstfall zu testen?
    • Hat Putin jetzt Polen angegriffen?
    • Wieso wirken viele deutsche Unis rückständig und primitiv im Vergleich zu USA?
    • Alleine reisen? Ja oder nein, und warum?
    • Sollten Programmiersprachen in der Schule Pflichtfach sein, ähnlich wie Mathe oder Englisch?
    • Was würdest du auf dem Sterbebett sagen?
    • Alle Beiträge
    • Feierabendfrage 🛋🌙
    • Meinung des Tages
    • Themenspecial: Ausbildungsstart im Handwerk 🛠️
    • Blickwechsel: Deine Fragen an eine unheilbar depressive Person
    • 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