使用基数排序排序日期

时间:2012-05-02 05:36:37

标签: c

我有一个给定的日期字符串数组,格式为dd/mm/yyyy

我想按照基数排序逐月对日期和年份进行排序,但我不知道怎么样,因为它最终会根据最大月数进行排序

例如我有以下数组: 16/04/2012 2013年1月5日 01/02/2012 2012年10月11日 2012年1月12日

通常排序后的结果是: 01/02/2012 16/04/2012 01/05/2013 10/11/2012 01/12/2012

虽然我想要的是: 01/02/2012 16/04/2012 10/11/2012 01/12/2012 01/05/2013 2012年首先是2013年

我还没有编写代码,因为我不知道算法是如何工作的,我必须使用只有1个基数排序

2 个答案:

答案 0 :(得分:1)

您需要两次应用基数排序,首先是月份,然后是年份。如果您只使用基数排序一次,则必须对年份进行排序,但不会订购同一年内的月份。也许您可以在一年内的月份中应用不同的算法,或者根本不使用基数排序。是否有一个特殊的原因,你只能排序一次?

答案 1 :(得分:1)

考虑将日期排序不在您拥有的表示上,而是在单独的排序键上排序。例如,对于日期01/02/2012,创建一个排序键20120201.现在数字的顺序从最重要到最不重要,您可以将排序键视为数字并对它们应用基数排序。

如果您愿意,您不必显式创建排序键,但是您必须修改为一轮基数排序选择数字的代码以强制执行正确的顺序。

相关问题