如何用C中的结构变量对数组进行排序?

问题描述 投票:0回答:1

最近我通过函数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);
}

但是它没有用。有任何线索,怎么办?

谢谢!

c sorting structure qsort
1个回答
0
投票

[qsort函数将指向数组每个元素的指针传递给比较函数(基本上,它在每个元素上都使用地址运算符qsort,如&中所述。]

如果数组中的每个元素都是指针,则传递的是指针指向指针

这意味着您的比较功能必须看起来像

&region[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; } )才是真正正确的,然后应将其强制转换为函数内部的正确指针类型。

© www.soinside.com 2019 - 2024. All rights reserved.