如何解决我要解决排序算法问题
首先我输入列表大小变量是n,然后得到n个日期数据,输入日、月、年。
我想使用该结构制作日期数组。
我想用c中的qsort对日期数据进行排序
例如) 20,1,2014 / 25,3,2010 / 3,12,1676 / 18,11,1982 / 19,4,2015 / 9,7,2015
->
3,1982 / 25,2010/ 20,2014/ 19,2015
但由于某种原因我无法解决它。
我想听听一些评论。
myapp.py
解决方法
您的 qsort
比较器是错误的。标准库函数需要一个函数接受两个 const void *
参数并返回一个 int
值,在确定两个项目之间的关系时表示负(更少)、零(等价)或正(更大)比较的。此外,您对 qsort
的第三个参数也是错误的。它是被排序序列中一个项目(单数)的大小,而不是项目的数量(您已经作为第二个参数提供了)。
修复这些,以及验证输入(不要假设任何东西),结果是:
#include <stdio.h>
#include <stdlib.h>
typedef struct date
{
int day;
int month;
int year;
} date;
int compare(const void *arg1,const void * arg2)
{
const date *d1 = arg1;
const date *d2 = arg2;
int res = (d1->year < d2->year) ? -1 : (d2->year < d1->year);
if (res == 0)
{
res = (d1->month < d2->month) ? -1 : (d2->month < d1->month);
}
if (res == 0)
{
res = (d1->day < d2->day) ? -1 : (d2->day < d1->day);
}
return res;
}
int main(void)
{
int n;
if (scanf("%d",&n) == 1 && n > 0)
{
date data[n];
int i = 0;
for (; i < n; ++i)
{
if (scanf("%d %d %d",&data[i].day,&data[i].month,&data[i].year) != 3)
break;
}
if (i > 0)
{
n = i;
qsort(data,n,sizeof *data,compare);
for (i = 0; i < n; i++)
{
printf("%d %d %d \n",data[i].day,data[i].month,data[i].year);
}
}
}
return 0;
}
是否最终匹配您的真实输入数据则完全是另一回事。我怀疑它不会,因为日期通常有斜线、破折号等。您可能需要花一些时间在输入值的实际数据解析上。但至少现在处理了排序部分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。