私は、stdlibの古いqsort関数が安定していないと仮定しています。なぜなら、マニュアルページはそれについて何も言わないからです。これは私が話している機能である:標準ライブラリqsortを安定化しますか?
#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;
}
}
なぜポインタを比較するのか分かりません。そして、あなたは安定しています(私の無知を実証してください)?たぶん、あなたはあなたの質問に精緻化することができます。 – jmatthias
安定しているということは、項目aが項目bと等しいことを意味し、最初は配列のbの前に来ますが、ソートされた配列ではbの前に来ます。サークルをソートする際の用語、およびアドレスを比較するハックの理由。非常にきれい。 – dmckee
@dmckeeという非常にきちんとしたアイデアですが、twkがアドレスを開始するのではなく現在のアドレスを使用しているので、残念ながら安定していません。 – paxdiablo