我试图将一年的记录分为几个月,然后是一个月中的几天(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;
}
}
}
}
我正在试图弄清楚如何对这个月内的日子进行排序。
任何帮助或建议都会很棒。
谢谢
答案 0 :(得分:4)
无需编写自己的排序算法。
首先,编写一个比较两个项目的比较器,如下所示:
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);
}
答案 1 :(得分:3)
你不能把你的if条件改为:
if ((yearData[j].month > yearData[j+1].month) ||
((yearData[j].month == yearData[j+1].month) &&
(yearData[j].day > yearData[j+1].day)))
{