Probleme mit binärer Suche



  • Hi Leute, ich habe mal versucht den Algorithmus der binären Such in einem C++ - Programm zu implementieren, doch ich habe da ein Problem. Immer wenn ich aus dem Array das erste Element wähle, dann stecke ich auf einmal in einer endlos-schleife fest. Ich poste mal hier mein programm, vielleicht kann mir da jemand helfen 🙂
    [cpp]
    #include <iostream.h>

    int main()
    {
    int array[10] = {1,5,9,34,56,78,234,654,721,1023};
    bool found = 0;
    int l = 0, r = 10, m = 0;
    int x;
    int i;

    for (i=0; i<=9; i++)
    {
    cout << array[i] << " ";
    }

    //nun beginnt die binäre Suche

    cout << endl << "Welche Zahl soll gesucht werden? ";
    cin >> x;

    while (l < r)
    {
    m = (l+r) / 2;
    if (array[m] == x)
    {
    found = 1;
    cout << "Fundstelle: " << m+1 << endl;
    }

    else if (array[m] > x)
    {
    r = m - 1;
    }

    else
    {
    l = m + 1;
    }
    }

    if (found == 0)
    {
    cout << "Die Zahl befindet sich nicht im Array!" << endl;
    }

    return 0;
    }

    Ach ja und kann mir jemand sagen wie ich es schaffe das in c++ das array nicht mit dem index 0 anfängt, sondern mit dem index 1?

    Thx für alle antworten



  • ich möchte mich für diese schlampige notation entschuldigen, aber ich habe es noch nie verstanden forenbeiträge gut zu gestalten 🙂



  • Dann geb ich dir mal den ersten Tipp: Editier deinen Beitrag so, dass die Code-Tags funktionieren.



  • Dafür musst du lediglich ein [/cpp] nach deinem Code machen. 🙂



  • Dravothrak schrieb:

    dann stecke ich auf einmal in einer endlos-schleife fest.

    IMHO müsste entweder die Abbruchbedingung der while-Schleife lauten (l < r && !found) oder du müsstest l=r=m setzen, wenn das Element gefunden wurde.

    Ach ja und kann mir jemand sagen wie ich es schaffe das in c++ das array nicht mit dem index 0 anfängt, sondern mit dem index 1?

    Gar nicht. Es geht natürlich, wenn man ein Array mit einem Element mehr anlegt und dann mit einem Zeiger auf der Element 1 arbeitet, aber das macht niemand. Find dich einfach damit ab, dass C != Pascal 😉


Anmelden zum Antworten