開発環境は Windows11/ VisualC++(MFC)です。
タイトル通りのですが、
qsort_sを使用してデータが8個以下で一度も並び替えが起きない場合、なぜか先頭のデータが最後に移動するので、
それの回避方法があれば教えてください。
以下はサンプルプログラムです
struct TestStruct {
int order;
int value;
};
int comp(void* z, const void* x, const void* y)
{
TestStruct* p1 = (TestStruct*)x;
TestStruct* p2 = (TestStruct*)y;
if ( p1->value != p2->value )
{
return p1->value - p2->value; // 比較値が全部同じなのでここには来ない
}
return 0;
}
//qsort_sの使用箇所
const int NUM = 8; // 9以下はバッファが回転する
TestStruct test[NUM];
for (int i = 0; i < NUM; i++)
{
test[i].order = i;
test[i].value = 5;
}
qsort_s((void*)test, sizeof(test) / sizeof(TestStruct), sizeof(TestStruct), comp, test);
以下が qsort_sから返ってきたデータです
test[0] {order=1 value=5 }
test[1] {order=2 value=5 }
test[2] {order=3 value=5 }
test[3] {order=4 value=5 }
test[4] {order=5 value=5 }
test[5] {order=6 value=5 }
test[6] {order=7 value=5 }
test[7] {order=0 value=5 } ← test[0]だったデータがtest[7]に来ている
NUMが9以上だとこの現象が起きずに 9の場合のtest[8] は {order=8, value=5}が返ります。
よろしくお願いいたします。