我假设stdlib中的经典qsort函数不是稳定的,因为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;
}
}
qsort
实现进入无限循环甚至执行越界写操作。 - R.. GitHub STOP HELPING ICE