2016-10-04 7 views
-3

Ich bin neu in StackOverflow. Tatsächlich habe ich es nur geschaffen, um diese Frage zu stellen.Erklärung des Codes QSORT-Code in C

Mein Prof leicht über eine Folie mit dem folgenden Code verglast, und jeder war verloren, mich eingeschlossen.

main(int argc, char *argv[]){ 

    int nlines; /* number of input lines read */ 

    int numeric = 0; /* 1 if numeric sort */ 

    if (argc > 1 && strcmp(argv[1], "-n") == 0) 
     numeric = 1; 
    if ((nlines = readlines(lineptr, MAXLINES)) >= 0) 
    { 
     qsort((void**) lineptr, 0, nlines-1, 
     (int (*)(void*,void*))(numeric ? numcmp : strcmp)); 
     writelines(lineptr, nlines); 
     return 0; 
    } 
    else 
    { ...} 
} 

Können Sie eine detaillierte Erklärung geben, was zum Teufel ist hier los?

+1

Ich würde sagen, das ist der Quellcode des 'sort' Befehls, nur auf einer Folie zu halten verschleierte und den interessanten Sortierabschnitt zu vermeiden :) –

+1

Bitte formatieren Sie Ihren Code. –

+1

Wäre es besser, den prod zu fragen. Er wird bezahlt, um Ihnen zu helfen –

Antwort

1

nlines verfolgt die Anzahl der Zeilen, die von der Eingabe gelesen werden. numeric verfolgt, wenn Zahlen sortiert werden (im Gegensatz zu Zeichen).

Der Rest meiner Erklärung ist in den Kommentaren:

int main(int argc, char *argv[]){ 

    int nlines; /* number of input lines read */ 

    int numeric = 0; /* 1 if numeric sort */ 

    /* evaluates whether or not numeric sorting is to be applied */ 
    if (argc > 1 && strcmp(argv[1], "-n") == 0) 
     numeric = 1; 

    /* this reads lines if there are any.*/ 
    /* it looks like `lineptr` must've been declared elsewhere */ 
    if ((nlines = readlines(lineptr, MAXLINES)) >= 0) 
    { 
     qsort((void**) lineptr, 0, nlines-1, 
     (int (*)(void*,void*))(numeric ? numcmp : strcmp)); 
     /* sort the elements accordingly... e.g., either as strings or numerically. */ 


     writelines(lineptr, nlines); 
     return 0; 
    } 

    /* else gets run if there is no input to take */ 
    else 
    { ...} 
}