Я хочу отсортировать все элементы, но qsort не полностью сортирует все.
Если бы у меня были даты
01/01/2019 15:30
01/01/2019 11:15
01/01/2019 17:00
01/01/2019 15:45
01/01/2019 15:30
01/01/2019 08:00
И я точно знаю, что значения правильно заданы в структуре
struct Date{ int year, month, day, hour, minute; }
function(...){ //properly assigns values to Date array }
int comp(const void *t1, const void *t2){
int t1year = ((const struct Date*)t1)->year;
int t2year = ((const struct Date*)t2)->year;
int t1month = ((const struct Date*)t1)->month;
int t2month = ((const struct Date*)t2)->month;
int t1day = ((const struct Date*)t1)->day;
int t2day = ((const struct Date*)t2)->day;
int t1hour = ((const struct Date*)t1)->hour;
int t2hour = ((const struct Date*)t2)->hour;
int t1minute = ((const struct Date*)t1)->minute;
int t2minute = ((const struct Date*)t2)->minute;
if (t1year < t2year)
return -1;
if (t1year == t2year && t1month < t2month)
return -1;
if (t1year == t2year && t1month == t2month &&
t1day < t2day)
return -1;
if (t1year == t2year && t1month == t2month &&
t1day == t2day && t1hour < t2hour)
return -1;
if (t1year == t2year && t1month == t2month &&
t1day == t2day && t1hour == t2hour && t1minute < t2minute)
return -1;
if (t1year == t2year && t1month == t2month &&
t1day == t2day && t1hour == t2hour && t1minute == t2minute)
return 0;
return 1;
}
void sortArray(struct Date dates[], int n){
qsort(dates, n, sizeof(Date), comp);
}
...
//prints through a for loop until n
Результаты были отсортированы, за исключением тех двух, которые имели одинаковое время.
01/01/2019 08:00
01/01/2019 15:30
01/01/2019 11:15
01/01/2019 15:30
01/01/2019 15:45
01/01/2019 17:00