最近我通过函数qsort掌握了数组中的排序结构。我从.csv文件加载了一个数组**。我的结构看起来像这样。
typedef struct {
int id;
char regionName[25];
char townName[25];
int countOfMan;
int countOfWoman;
} tTown;
我想按区域中女性人数对数组进行排序。我已经定义了比较功能,并试图对其进行排序。
int compareWomenCount(const tTown* village1, const tTown* village2) {
int result = 0;
if (village1->countOfWoman < village2->countOfWoman) {
result = -1;
}
else if (village1->countOfWoman > village2->countOfWoman) {
result = 1;
}
return result;
}
这是我的qsort:
void sortArray(tTown** region, int arrayLength) {
qsort(region, arrayLength, sizeof(tTown*), compareWomenCount);
}
但是它没有用。有任何线索,怎么办?
谢谢!
[qsort
函数将指向数组每个元素的指针传递给比较函数(基本上,它在每个元素上都使用地址运算符qsort
,如&
中所述。]
如果数组中的每个元素都是指针,则传递的是指针指向指针。
这意味着您的比较功能必须看起来像
®ion[i]
此外,排序函数的参数需要通用常量指针(int compareWomenCount(const tTown** village1, const tTown** village2) {
int result = 0;
if ((*village1)->countOfWoman < (*village2)->countOfWoman) {
result = -1;
}
else if ((*village1)->countOfWoman > (*village2)->countOfWoman) {
result = 1;
}
return result;
}
)才是真正正确的,然后应将其强制转换为函数内部的正确指针类型。