2017-05-25 1 views
1

Ich versuche, eine Reihe von Zeichen in C zu sortieren, aber es druckt die gleiche Array anstelle der sortiertenKann das Zeichenfeld mit Blasensortierung in C

char*P[5] = {"1c", "4h", "3g", "10g"}; 
total_items = 4; // number of elements in the array. 

for(int q =1; q<total_items; q++) 
{ 
    for(int k=0; k<total_items-q; k++) 
    { 
     if((int)P[k]>=(int)P[k+1]) 
     { 
      temp=P[k]; 
      P[k]=P[k+1]; 
      P[k+1]=temp; 
     } 
    } 
} 

Wenn ich drucken Sie das Array sortieren, Es ist das gleiche wie das Original. Ich habe das Debugging versucht, indem ich in den if-Anweisungen gedruckt habe. Es stellt sich heraus, dass es den Swap-Block des Codes nie eingibt. Gibt es etwas, das mir fehlt?

Die erwartete Ausgabe sollte 1c, 3g, 10g, 4h sein.

+1

Verwenden 'strcmp' statt'> = '('> '). – BLUEPIXY

+0

@BLUEPIXY: Hallo, könntest du das für mich bearbeiten? Ich habe versucht, mit strcmp und es druckt das gesamte Array in umgekehrter Reihenfolge, nicht sicher, wo ich hier falsch liege: \ –

+1

Lesen [strcmp] (http://en.cppreference.com/w/c/string/byte/ strcmp) – BLUEPIXY

Antwort

1

Erstellen Sie Ihre eigene Vergleichsfunktion.

wie folgt aus:

int cmp(const char *a, const char *b){ 
    int ai, bi; 
    char ac, bc; 
    sscanf(a, "%d%c", &ai, &ac);//Separate number and letter 
    sscanf(b, "%d%c", &bi, &bc); 
    if(ac > bc) 
     return 1; 
    else if(ac < bc) 
     return -1; 
    return ai < bi ? -1 : ai > bi; 
} 

dann ersetzen if((int)P[k]>=(int)P[k+1]) mit if(cmp(P[k], P[k+1]) > 0)

+0

Hallo, vielen Dank. Nur ein weiterer Punkt der Anfrage, der Code schlägt fehl, wenn ich versuche, es mit verschiedenen Array wie {1a 1c 2a 2f 1d}, es 2a 2a "whitespace" 2f. Irgendeine Idee warum? –

+0

@StackOverflow Siehe [DEMO] (http://ideone.com/jD2Bu0) – BLUEPIXY

Verwandte Themen