誰でも次の例で何が問題なのか教えてください。私はそれをhereから取り出し、int
をunsigned long
に置き換えました。私もcmpfunc
をunsigned long
を適切に処理するように変更しました。ここでC:qsortが符号なしlongで動作しないようです
#include <stdio.h>
#include <stdlib.h>
unsigned long values[] = { 88, 56, 100, 2, 25 };
int cmpfunc (const void * a, const void * b)
{
if(*(unsigned long*)a - *(unsigned long*)b < 0){
return -1;
}
if(*(unsigned long*)a - *(unsigned long*)b > 0){
return 1;
}
if(*(unsigned long*)a - *(unsigned long*)b == 0){
return 0;
}
}
int main()
{
int n;
printf("Before sorting the list is: \n");
for(n = 0 ; n < 5; n++)
{
printf("%lu ", values[n]);
}
qsort(values, 5, sizeof(unsigned long), cmpfunc);
printf("\nAfter sorting the list is: \n");
for(n = 0 ; n < 5; n++)
{
printf("%lu ", values[n]);
}
return(0);
}
は、私が得た出力である:
Before sorting the list is:
88 56 100 2 25
After sorting the list is:
25 2 100 56 88
:
関数は値を比較する必要がありますか? –
Bang!右そこに:) –