Wie korrigiere ich meinen CountSort-Code, damit er absteigend sortiert?
Hallo!
Meine Aufgabe: Ich soll eine Count Sort implementieren, und zwar so, dass man beim Programm aufrufen im Argument auswählen kann, ob das Array aufsteigend oder absteigend sortiert werden soll.
Mein Problem: Das Aufsteigen sortieren funktioniert, aber das Absteigen sortiert ebenfalls aufsteigend, obwohl es absteigend sortieren soll.
Meine Annahmen: Eigentlich gehe ich davon aus, dass meine Funktion "count_sort_write_output_array", welche das sortierte Array basierend auf der angegebenen Sortierrichtung erstellt, korrekt ist. Schließlich ist es einfach der gleiche Code wie für ASCENDING (aufsteigend), bloß mit geringfügigen Änderungen.
Ich denke eher, dass es daran liegt, dass mein Code erst gar nicht DESCENDING (absteigend) 'auswählt', wenn "desc" als Argument gegeben wird. Ich habe als Standardverhalten ASCENDING gesetzt (also falls kein Argument gegeben wird, oder ein falsches Argument gegeben wird, wird es aufsteigend sortiert), also dachte ich vielleicht, dass entweder
if (strcmp(order, "asc") == 0)
oder
else if (strcmp(order, "desc") == 0)
(in der SortDirection Funktion) irgendwie "falsch" sind, sodass die Sortierfunktion immer das Standardverhalten auswählt. (Also ASCENDING)
Als Debug-Versuch habe ich:
printf("Sortdirection must be defined. Using default: ASCENDING\n");
eingefügt, um zu schauen ob das wirklich der Fall ist. Dennoch wird dieser printf nie gezeigt, selbst wenn ich kein Argument eingebe. Was mich ziemlich verwirrt. Bricht es vorher ab?
Meine 'Frage' an euch: Ich würde es sehr schätzen, wenn jemand einen Blick darauf werfen könnte. Eventuell kann jemand erkennen, woran mein Semantikfehler liegt.
Aber würde ich es auch schätzen, wenn mir jemand andere Debug-Ideen nennen könnte. Ich habe noch nicht viel mit 'Debugging-Methoden' beschäftigt und habe meine Probleme bisher größtenteils mit printfs gelöst. Aber vielleicht gibt es da etwas leichteres!
Vielen Dank!
2 Antworten
Code als Bilder sind natürlich pfui.
Was allerdings fehlt: Wo wird SortDriection als Typ definiert und was sind ASCENDING und DESCENDING.
Undabhängig davon sieht das Vorgehen ansich okay aus, Du könntest in extract_sort_dirdction() mal printf() nutzen:
printf("%s<\n",order);
if (strcmp(order,"asc") == 0){
printf("Sort Ascending:%...\n",ASCENDING);
return ASCENDING;
}
if (strcmp(order,"desc") == 0){
printf("Sort Descending:%...\n",DESCENDING);
return DESCENDING;
}
Anstatt der Punkte sollte natürlich der richtige qualifier für den Typ rein.
Wie dem auch sei, ansich wäre eh folgendes naheliegend:
if(strcmp(order,"desc")==0) return DESCENDING;
if(strcmp(oder,"asc")!=0) printf("Invalid direction, defaulting to ASCENDING\n");
return ASCENDING;
Kleistere doch mal alles mit Ausgaben voll (und mach ein flusch jeweils danach), dann solltest du sehen, wo es schief geht bzw. welcher Progammteil ausgeführt wird.
Auf den ersten Blick sieht es an sich korrekt aus.