排序多个结构

时间:2015-12-09 07:48:12

标签: c arrays sorting struct

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

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

我的问题是,要做到以下几点,我能做的唯一算法会崩溃我的提示并给我一个分段错误。到现在为止,我很困惑,不知道我的逻辑是否错误,或者我是否以过于复杂的方式为程序工作。

这是我的鳕鱼的功能

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];
    }
}

可能有更好的方法,我只是没有看到它。

2 个答案:

答案 0 :(得分:1)

您可能希望将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;
}

请记住,所有这些代码都可能无法正常工作。 Haven长时间没有编写C代码,所以这更像是理论代码。基本上你想要从数组中查看结构并以某种方式在函数内部比较它们的值。

答案 1 :(得分:-1)

按月计算,如果它们在几天内排序相同。使用任何排序算法。