我对使用结构数组的选择排序的逻辑存在问题。比如说这是我的结构:
struct data {
int month
int day
..
.. }
现在我要做的就是对月份和日期进行排序。我相信我知道这几个月如何做到这一点,但我很难理解如何实现这几天。这是我目前为止几个月的代码:
void sortData(struct Data yearData[], int sz)
int i, j, m;
int temp;
for (i = 0; i < sz; i++) {
m = i;
for (j = i + 1; j < sz; j++)
if (yearData[j].month < yearData[m].month) {
m = j;
}
if (m != i) {
temp = yearData[i].month;
yearData[i].month = yearData[m].month;
yearData[m].month = temp;
}
}
}
我想我想查看月份是否相同,然后查看日期并对它们进行排序。我只是不知道在这种情况下添加另一个迭代是否正确。谢谢!
答案 0 :(得分:1)
试试这个:
...
if((yearData[j].month < yearData[m].month) ||
((yearData[j].month == yearData[m].month) &&
(yearData[j].day < yearData[m].day))) {
m = j;
}
...
但是,我不确定我理解你的交换。你应该逐个交换整个结构,而不是它的成员。考虑一下:
if (m != i) {
struct Data tmp = yearData[i];
yearData[i] = yearData[m];
yearData[m] = tmp;
}
答案 1 :(得分:0)
制作比较功能,然后使用其结果。如果结构相等,比较函数应该返回0,如果左边应该是第一个,则返回-1,如果右边应该第一个,则返回+1。
它看起来像:
int yearDataCmp(struct Data left, struct Data right) {
if ( left.month < right.month ) { return -1; }
if ( left.month > right.month ) { return 1; }
if ( left.day < right.day ) { return -1; }
if ( left.day > right.day ) { return 1; }
return 0;
}