C 对结构的长数组排序

C 对结构的长数组排序,c,arrays,sorting,struct,C,Arrays,Sorting,Struct,所以我有一个包含月和日的结构数组,我想对它进行排序,这样第一个结构将保存月1的第1天,第二个结构保存月1的第2天,依此类推 我试图通过将正确的数组存储在一个临时数组中,然后替换它们来实现这一点 我的问题是,要执行以下操作,我能做的唯一算法会使提示符崩溃,并给我一个分段错误。到现在为止,我已经够糊涂了,不知道我的逻辑是否错了,或者我正在以一种过于复杂的方式进行操作,程序无法运行 这是我的cod函数 void sortData(struct StructData data[], int size){

所以我有一个包含月和日的结构数组,我想对它进行排序,这样第一个结构将保存月1的第1天,第二个结构保存月1的第2天,依此类推

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

我的问题是,要执行以下操作,我能做的唯一算法会使提示符崩溃,并给我一个分段错误。到现在为止,我已经够糊涂了,不知道我的逻辑是否错了,或者我正在以一种过于复杂的方式进行操作,程序无法运行

这是我的cod函数

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;
}
int comp(常量无效*elem1,常量无效*elem2)
{
struct StructData f=*((struct StructData*)elem1);
struct StructData s=*((struct StructData*)elem2);
如果(f.day>s.day)返回1;
如果(f日

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

您可能希望将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;
}
int comp(常量无效*elem1,常量无效*elem2)
{
struct StructData f=*((struct StructData*)elem1);
struct StructData s=*((struct StructData*)elem2);
如果(f.day>s.day)返回1;
如果(f日

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

如果它们在天上的排序相同,则按月排序。使用任何排序算法。

如果月份排序与天数排序相同,则按月份排序。使用任何排序算法。

尝试使用qsort:SEGFULT进行处理。这里的错误可能是由于数组索引越界造成的。使用一个调试器,它将告诉您SEGFULT发生的确切位置。如果您不知道如何使用调试器,那么现在是开始学习调试器的时候了。如果你想得到更多的答案,请显示更多的代码。@phyrepoph我想是的,但是我怎样才能按照这个规则对整个结构进行排序呢?我不想只对日子进行分类。我需要对整个结构进行排序,因为它保存了特定日期的数据。你会添加你的结构吗?@MichaelWalz我在帖子中添加了整个函数。“债券外数组索引”是指我使用的是我没有的变量?如果是这样的话,我想这不会是一个问题,因为我使用的是一个“If”语句,只要它不符合要求,就不应该与变量一起操作。尝试使用qsort:Segfault在这里乱搞可能是由于数组索引超出了范围。使用一个调试器,它将告诉您SEGFULT发生的确切位置。如果您不知道如何使用调试器,那么现在是开始学习调试器的时候了。如果你想得到更多的答案,请显示更多的代码。@phyrepoph我想是的,但是我怎样才能按照这个规则对整个结构进行排序呢?我不想只对日子进行分类。我需要对整个结构进行排序,因为它保存了特定日期的数据。你会添加你的结构吗?@MichaelWalz我在帖子中添加了整个函数。“债券外数组索引”是指我使用的是我没有的变量?如果是这样,我想这不会是一个问题,因为我使用的是一个“If”语句,只要它不符合要求,就不应该与变量一起操作。我觉得“使用任何排序算法”是问题的核心。我觉得“使用任何排序算法”是问题的核心。