c - 对长结构数组进行排序

标签 c arrays sorting struct

所以我有一个包含月份和日期的结构数组,我想对其进行排序,以便第一个结构将包含 1 月的第 1 天,第二个结构将包含 mont 1 的第 2 天,依此类推。

我试图通过将正确的数组存储在时间数组中然后替换它们来实现这一点。

我的问题是,要执行以下操作,我可以制作的唯一算法使我的提示崩溃并给我一个段错误。到现在为止,我已经很困惑了,不知道是我的逻辑错了,还是我以一种过于复杂的方式让程序无法运行。

这是我的鳕鱼的功能

void sortData(struct StructData data[], int size){

    int i=0,x=0,z=0,v_day=0,v2_day=0;
    struct StructData temp[sz];

    for (i=0;i!=12;i++){

        for (x=0;x!=12;x++){

            if (data[x].month == i+1){

                for (v=0;v!=31;v++){

                    for(v2=0;v2!=31;v2++){

                        if (data[v2].day == v+1){

                            temporal[z] = data[v2];
                            z=z+1;

                        }
                    }
                }
            } 
        }
    }

    i=0;


    for (i=0;i!=size;i++){
        data[i] = temporal[i];
    }
}

可能有更好的方法来做到这一点,我只是没有看到。

最佳答案

您可能希望将 qsort 与类似这样的比较函数一起使用:

int comp (const void * elem1, const void * elem2)
{
    struct StructData f = *((struct StructData*)elem1);
    struct StructData s = *((struct StructData*)elem2);
    if (f.day > s.day) return  1;
    if (f.day < s.day) return -1;
    return 0;
}

请记住,所有这些代码可能都不起作用。很长时间没有编写 C 代码,所以这更像是理论代码。基本上,您想查看数组中的结构并以某种方式比较它们在函数内部的值。

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

相关文章:

c - 无需按 Enter 键即可读取键盘输入

arrays - 遍历 Google 表格单元格中的逗号分隔列表

PHP:使用 foreach 从三维数组中回显菜单?

c++ - 根据 size() 排序 vector

C++,根据另一个 vector 对一个 vector 进行排序

javascript - 如何根据特定键对嵌套数组的索引进行排序?

c - Linux 中 C 中的递归文件删除

c++ - 错误 : invalid conversion from ‘void*’ to ‘test::apr_size_t* {aka long unsigned int*}’ [-fpermissive]

javascript - Emscripten - 如何为采用 float**、float** 和 unsigned long 的 C 函数定义 getFuncWrapper 签名?

php - 通过将数组传递给 MySQL PHP 中的查询来动态创建 OR 条件