Verbesserung einer Sortierung
-
Hi,
vor einigen Monaten ist mir der beim Sortieralgorithmus geholfen worden uns es kam beim Sorrtieren eines Arrays, welches die kleinste Zahl außerhalb der '0' ausgegeben worden.int compare_entry(void const *a, void const *b) { int const m = ((entry const *)a)->val; int const n = ((entry const *)b)->val; if (m > n) return 1; else if (n > m) return -1; else return 0; }
Das funktioniert ganz gut jedoch, wenn nach der '0' mehr als ein mal der gleiche Wert auftaucht, dann ist dieser manchmal nicht optimal sortiert.
zb: (10, 20, 0, 0, 10, 30, 10)
-> (0, 0, 10, 10, 10, 20, 30) ist richtig sortiert, jedoch würde ich gern dass die 'letzte 10' in meinem Beispiel an erster Stelle nach der '0' ausgegeben würde. Also immer die letzte Position der kleinsten Zahl nach der '0' an 1. Stelle steht. Wie ist dieses zu ändern, damit es passt? es müsste eig nur ein Vergleich beim Sortieren hinein, oder nicht?
-
Und wozu soll das gut sein? Ich kenne nur die Anforderung, daß die "erste 10" ganz vorne in der sortierten Folge stehen soll - das läuft auf sogenannte "stabile Sortieralgorithmen" hinaus.
(btw, schreibst du eigentlich einen eigenen Sortieralgorithmus oder nur eine Vergleichsfunktion für qsort()?)