首页 > 解决方案 > 找到最小时间和日期戳的有效方法是什么?

问题描述

我创建了一个具有不同时间戳和日期的表。时间和日期的结构如下:

typedef struct structTimeDate
{
    int seconds;
    int minutes;
    int hours;
    int day;
    int month;
    int year;
} TimeDate;

表格的每一行都有一个TimeDate. 我想要实现的是TimeDate从表中找到最少的,即日期和时间最早的表。我想过迭代表格并编写ifelse if实现它,但它似乎很复杂且容易出错。

是否有任何现有的算法可以帮助实现我的目标?我不是在找人给我写代码。我想要一个适合我要求的起点或任何算法。提前致谢。

标签: calgorithm

解决方案


if then else还不错 。

if (x.year < y.year) return -1;
if (x.year > y.year) return 1;
if (x.month < y.month) return -1;
if (x.month > y.month) return 1;
...
if (x.sec < y.sec) return -1;
if (x.sec > y.sec) return 1;
return 0;

替代:

如果只需要比较顺序并且成员在主要范围内,请创建一个人工整数时间戳。

// Think of date as base 13, 32, 24, 60, 60
long long ts = ((((x.year*13LL + x.month)*32 + x.day)*24 + x.hour)*60 + x.min)*60 + x.sec;

然后简单地比较时间戳的整数值以找到最大的。

支持负数年需要额外的工作。


使用 2 的幂常数可以获得较小的效率。

long long ts = ((((x.year*16LL + x.month)*32 + x.day)*32 + x.hour)*64 + x.min)*64 + x.sec;

推荐阅读