我正在使用qsort()
对结构体数组中的双精度值进行降序排序。我有以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct page {
double val;
int id;
} page;
int cmpfunc(const void *a, const void *b) {
const page *pageA = (page*)a;
const page *pageB = (page*)b;
return -(pageA->val - pageB->val);
}
int main(void) {
page array[5];
int n;
int i = 1;
for(n = 0; n < 5; n++) {
array[n].id = i;
i++;
}
array[0].val = 0.0608;
array[1].val = 0.2230;
array[2].val = 0.1673;
array[3].val = 0.1442;
array[4].val = 0.2499;
printf("Before sorting\n");
for(n = 0; n < 5; n++) {
printf("page id = %d, val = %lf \n", array[n].id, array[n].val);
}
qsort(array, 5, sizeof(page), cmpfunc);
printf("\nAfter sorting\n");
for(n = 0; n < 5; n++) {
printf("page id = %d, val = %lf \n", array[n].id, array[n].val);
}
return 0;
}
我尝试使用qsort()来对整数进行排序,成功了。但是在尝试对双精度浮点数进行排序时,我的输出没有排序:
排序后:
页面ID = 2,值= 0.223000
页面ID = 3,值= 0.167300
页面ID = 4,值= 0.144200
页面ID = 5,值= 0.249900
页面ID = 1,值= 0.060800
我不确定为什么输出没有正确排序。我已经阅读了在线帖子,了解如何对结构体数组中的值进行排序,并且相信我的比较函数是正确的。如果有任何见解,将不胜感激。
return (a > b) - (a < b);
,可以创建高效的代码。 - chux - Reinstate Monica