C - 先按月然后按天对一年的数据进行排序

标签 c algorithm sorting

我试图在 C 中先将一年的记录按月份分类,然后按月份的天数 (1-28/29/30/31) 分类。我按月份分类。

struct DailyData {
    int day;
    int month;
    int year;
    float high;
    float low;
    float precipitation;
    char condition;
};

void sortYearData(struct DailyData yearData[], int sizeOfArray){

    int i,j;
    struct DailyData climate;


    for (i = sizeOfArray - 1; i > 0; i--) {
        for (j = 0; j < i; j++) {
            if (yearData[j].month > yearData[j+1].month) {
                climate = yearData[j];
                yearData[j] = yearData[j+1];
                yearData[j+1] = climate;
            }
        }
    }
}

我想弄清楚现在如何对一个月内的天数进行排序。

任何帮助或建议都会很棒。

谢谢

最佳答案

无需编写自己的排序算法。

首先,编写一个比较器来比较两个项目,如下所示:

int data_comparer(void const *x, void const *y) {
    DailyData const *X = x, *Y = y;
    return  X->month != Y->month ? (X->month > Y->month) - (X->month < Y->month)
                                 : (X->day   > Y->day)   - (X->day   < Y->day);
}

然后您可以像这样将其与 qsort 一起使用:

void sortYearData(struct DailyData yearData[], size_t sizeOfArray){
    qsort(yearData, sizeOfArray, sizeof *yearData, data_comparer);
}

作为警告,您可以对 bsearch 使用相同的比较器:

struct DailyData *search(struct DailyData yearData[], size_t sizeOfArray, struct DailyData *search_query) {
    return bsearch(search_query, yearData, sizeOfArray, sizeof *yearData, data_comparer);
}

关于C - 先按月然后按天对一年的数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146163/

相关文章:

c# - 如何编写对称版本的对齐值公式(在 C# 中)

c++ - 使用特殊参数拆分字符串

perl - 如何通过多个键对 perl 哈希进行排序?

node.js - 按 MongoDB 中具有相同字段的文档数排序/分组

无法定义共享内存对象的大小

C++限制CPU处理时间

algorithm - 获取 "friend"塔的编号

正确地从函数传递数组

c - 使用 I/O 重定向输入数据集时出现段错误

C编程: Sorting a integer file while keeping their original place in file