Ich gehe davon aus, dass die gute alte qsort-Funktion in stdlib nicht stabil ist, weil die man-Seite nichts dazu sagt. Dies ist die Funktion ich spreche:Stabilisierung der Standardbibliothek qsort?
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
Ich gehe davon aus, dass, wenn ich meine Vergleichsfunktion auch ändern, um die Adresse, dass beinhalten, die ich vergleiche, wird es stabil sein. Ist das korrekt?
ZB:
int compareFoos(const void* pA, const void *pB) {
Foo *pFooA = (Foo*) pA;
Foo *pFooB = (Foo*) pB;
if(pFooA->id < pFooB->id) {
return -1;
} else if(pFooA->id > pFooB->id) {
return 1;
} else if(pA < pB) {
return -1;
} else if(pB > pA) {
return 1;
} else {
return 0;
}
}
Ich verstehe nicht, warum Sie die Zeiger vergleichen würden. Und was meinst du mit Stall (entschuldige meine Ignoranz). Vielleicht könnten Sie Ihre Frage näher ausführen. – jmatthias
Durch stabil bedeutet er, dass Elemente vergleicht sich gleich wie Element b, und a kommt vor b im Array, es wird * noch * vor b in der sortierten Array. Begriff der Kunst in der Sortierung von Kreisen, und der Grund für den Hack der Vergleich der Adressen. Sehr gepflegt. – dmckee
Sehr nette Idee, @dmckee, aber leider nicht stabil da twk aktuelle Adressen statt Startadressen verwendet :-) – paxdiablo