2013-10-09 56 views
0

我有一系列的事件,我想根据他们的年份对它们进行排序,然后按月对每一年进行排序,然后对每个月按日进行排序,然后对每一天按小时进行排序。如何基于C中的多个字段对数组进行排序?

typedef struct { 
    struct tm start; 
    struct tm end; 
} event; 
... 
event events[100]; 

我只需要担心排序与start日期。我一直在挣扎几个小时...

+0

您可以通过阅读有关标准库函数['qsort'(http://en.cppreference.com/w/c/algorithm/启动快速排序)。 –

+0

我已经看过它,我只是不知道如何使用一个函数作为它需要的参数。我现在知道了 –

回答

5

您可以用同样的方法任何在多个键上排序:一次一个,按您想要的优先顺序排列。

一个qsort()回调可能是这个样子:

static int event_compare(const void *a, const void *b) 
{ 
    const event *ae = a, *be = b; 

    if(ae->start.tm_year < be->start.tm_year) 
    return -1; 
    else if(ae->start.tm_year > be->start.tm_year) 
    return 1; 
    /* Years are equal, try to solve that by checking month. */ 
    if(ae->start.tm_month < be->start.tm_month) 
    return -1; 
    else if(ae->start.tm_month > be->start.tm_month) 
    return 1; 
    /* Months are equal, go on with day, and so on. */ 
} 
+0

我不知道如何使用'qsort'。非常感谢! –

相关问题