binary search in C



  • Hallo zusammen, ich bin ein c Anfänger. hab ein kleines Programm geschrieben um binary search richtig zu verstehen. Es funktioniert leider nicht richtig, kann aber den Fehler nicht erkennen, wäre super wenn ihr mir helfen könntet.

    Gewünschter Ablauf des Programms:
    1. Ein Zahl einlesen
    2. überprüfen ob die zahl im Array A enthalten ist oder nicht.
    2.1 wenn enthalten --> Ausgabe: bestätigen mit Angabe des Indexes und Anzahl der verbleiche die vorgenommen wurden.
    2.2 wenn nicht enthalten --> Ausgabe dass es nicht enthalten ist und Anzahl der vorgenommenen vergleiche.

    der Quellcode:

    //
    // File.c
    // new
    //
    // Created by on 17.03.14.
    // Copyright (c) 2014 . All rights reserved.
    //

    #include <stdio.h>
    #define NOT_FOUND -1
    int counter;
    int N= 8 ;
    int k;

    int binsearch(int A[], int schluessel, int l, int r)
    {

    if (N%2 == 0)
    k= (N/2) -1;

    if (N%2 !=0)
    k= ((N-1)/2) -1;

    while (r>=l) {
    counter++;
    if (schluessel == A[k])
    return k;
    if (schluessel < A[k])
    r=k-1;

    else l=k+1;
    }

    return NOT_FOUND;

    }

    int main()
    {
    int key;
    int x;

    int A[8]={2,5,9,18,23,34,36,99};

    printf("Eingabe:\n");
    scanf("%d", &key);
    getchar();

    x= binsearch(A, key, 0, N-1);

    if ((x!=0)&& (x!=-1))
    printf("Die Zahl wurde gefunden, sie befindet sich im Index: %d im Array.\n Es wurden %d Vergleiche durchgefuert", k, counter);

    if (x==-1)
    printf("Die Zahl wurde leider nicht gefunden, es wurden %d Vergleiche vorgenommen.", counter);

    return 0;
    }

    Vielen DANK IM VORAUS!!!


  • Mod

    JoNes3436 schrieb:

    Es funktioniert leider nicht richtig, kann aber den Fehler nicht erkennen, wäre super wenn ihr mir helfen könntet.

    Wieso müssen wir jetzt erst selber herausfinden, was da dran nicht wie gewünscht funktioniert, anstatt, dass du es uns beschreibst?

    Jedenfalls: Dein Programm ist vollständig falsch. Der Algorithmus ist falsch umgesetzt, der Stil macht Debuggen schwer und lädt zu Fehlern ein.

    Fehler im Algorithmus:
    -Deine Grenzen werden nie verändert.

    Stilfehler:
    -Globale Variablen. Gerade hier sind sie nicht nur schlechter Stil, sondern schlicht falsch.
    -kryptische Bezeichner
    -magische Werte, da die entsprechenden defines nicht konsequent genutzt werden



  • Oh ja dry , ist mein erster Post im Forum.

    die Compilierung funktioniert, es werden keine Fehler angezeigt
    --> build succeeded

    auf der Konsole erscheint : Eingabe
    nach dem man eine Eingabe getätigt hat + enter = passiert nichts mehr.
    (Auch nach mehreren Eingaben+enter passiert weiterhin nichts)



  • okay danke für die tipps ich überarbeite es nochmal.


Anmelden zum Antworten