Я предполагаю, что хорошая старая функция qsort в stdlib нестабильна, потому что в man-странице ничего не говорится об этом. Это функция, о которой я говорю:
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
Я предполагаю, что если я изменю свою функцию сравнения, чтобы также включить адрес того, что я сравниваю, он будет стабильным. Это верно?
Например:
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;
}
}