我试图在 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/