c - 在 C 中对结构数组进行排序

标签 c sorting

假设我有这样的结构:

typedef struct MyStruct{
  char *string1;
  int number1, number2, number3;
  char string2[11], string3[9];
  char *string4;
  char *string5;
}MyStruct;

程序提示用户选择应该按哪个字段对数据进行排序。我无法想出一种有效排序数组的方法。我真的需要为每个字段编写单独的排序函数吗?一定有其他方法,因为编写 8 个函数,而 2 个函数就足够了,这看起来不合理。

最佳答案

查找qsort()来自 <stdlib.h> .它需要一个比较器函数。您可以为不同的排序顺序编写单独的比较器函数,但仍使用标准库 qsort()进行排序。

例如:

int ms_cmp_string1(const void *vp1, const void *vp2)
{
    const MyStruct *ms1 = vp1;
    const MyStruct *ms2 = vp2;

    int cmp = strcmp(ms1->string1, ms1->string2);
    if (cmp != 0)
        return cmp;
    else if (ms1->number1 < ms2->number1)
        return -1;
    else if (ms1->number1 > ms2->number1)
        return +1;
    //...other comparisons as required...
    else
        return 0;
}

这是比较器的一个不错的大纲。这个在 string1 上排序然后通过 number1 .您可以编写在不同字段上排序的变体,或者设计一个方案,按照您选择的顺序应用各种可能的测试。但基本大纲效果很好,适合传递给 qsort()无需任何强制转换。

关于c - 在 C 中对结构数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933487/

相关文章:

c - 在内核中查找未知类型内存的大小

javascript - 我怎样才能更好地写出这份报告候选人的功能呢?

java - 按我喜欢的方式对 JTable 进行排序

无法执行 Shellcode --> (Speicherzugriffsfehler (Speicherabzug geschrieben))

c - 嵌套数组(6 维)的替代方案,内存间隙保留 O(1) 访问

c - GCC:为什么这个 fprintf 有一个 -Wformat 警告?

c - 循环后编程打印

javascript - 对其中包含字符串的数组进行排序

python - 根据字符串的长度对 Python 列表进行排序

java - Java中不排序的自定义对象数组排序