2016-05-09 5 views
-3

Ich habe versucht, den ganzen Tag herauszufinden, und es scheint nicht zu funktionieren. Warum kommt der binäre Such Arbeit, wenn ich Eingabe der Feldlänge in Hand, aber wenn ich die manuelle Eingabe tauschen für:Binäre Suche Int Array Größe Problem

int max = sizeof(list)/sizeof(list[0]); 

es scheint nicht zu funktionieren. Wenn ich zum Beispiel nach einer 2 in einem 11-Element-Array von 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 suchen möchte, kann es 2 nicht finden. Aber wenn ich int ändere, min = 11. Es kann 2. Hier ist die Funktion binäre Art finden:

int binarysearch(int *list, int sfor) 

    int min = 0; 
    int max = 10; 
    int mid = (min + max)/2; 

    while(min <= max) 
    { 
     if (sfor == list[mid]) 
     { 
      printf("The number you are searching for is in %i place \n", mid + 1); 
      return 0; 
     } 
     else if (sfor < list[mid]) 
     { 
      max = mid - 1; 
     } 
     else 
     { 
      min = mid + 1; 
     } 

     mid = (min + max)/2; 
    } 

     printf("Could not find number! \n"); 
     return 1; 



int main(int argc, string argv[]) // number searching for is passed through 
{         // command line argument 

    printf("How many numbers did you want to search through? \n"); 
    int a = GetInt(); //int a is how big should the array of numbers be 
    printf("What are they: \n"); 

    int i = 0; 
    int b[a]; 

    for (i = 0; i < a; i++) 
    { 
     b[i] = GetInt(); //cycles though each int of the array 
    } 

    int x = atoi(argv[1]); //converts command line argument to an int 

    binarysearch(b, x); 
} 

jede Hilfe sehr zu schätzen wissen.

+2

Wie ist 'liste' definiert? 'int * list;'? –

+0

Lernen Sie, Ihren Code zu debuggen. Drucken Sie den Wert von min und prüfen Sie, ob es korrekt ist oder nicht. – user31264

+0

Wenn ich meinen Code debuggen sagt es max = 2, aber wenn die Array-Länge 11 ist, wie int max = sizeof (Liste)/sizeof (Liste [0]); 2 bekommen? –

Antwort

0

Ihr Problem ist hier:

int min = sizeof(list)/sizeof(list[0]); 

, die nicht für Arrays arbeiten an Funktionen übergeben (wie Sie nicht tatsächlich ein Array an eine Funktion übergeben können). Sie müssen auch die Größe des Arrays übergeben.

+0

Dies ist kein "Trick", sondern ein normaler und rechtlicher Ausdruck. Und der Grund, warum es nicht funktioniert, ist, weil Sie ein Array nicht an eine Funktion in C übergeben können. Der letzte Satz ist einfach falsch. – Olaf

+0

@Olaf Wie ist es falsch? Es wird nicht funktionieren, wenn Sie ein Array an einer Stelle deklarieren und es dann an eine andere Funktion übergeben, denn wie Sie sagen, können Sie das nicht tun. Darüber hinaus funktioniert es nur, wenn ihre Größe zur Kompilierungszeit bekannt ist, da sizeof keine Funktion, sondern ein Makro ist. – bodangly

+0

@Olaf Ich habe meine Antwort bearbeitet, um klarer zu sein, und das Wort trick entfernt (obwohl ich behaupte, dass es in jedem Fall nicht empfohlen wird. Sie sollten immer die Größe Ihres Arrays kennen, ob Sie es zur Laufzeit zugewiesen oder kompiliert haben Zeit, diese Größe sollte irgendwo festgehalten werden. Du solltest niemals auf diese Methode zurückgreifen müssen, und ich würde so weit gehen zu sagen, dass es ein Code-Geruch ist.) – bodangly