我有一个给定的日期字符串数组,格式为 dd/mm/yyyy
.
我希望按照基数排序逐月对日期和年份进行排序,但我不知道如何因为它最终会根据最大月份排序
例如,我有以下数组:16/04/2012 01/05/2013 01/02/2012 10/11/2012 01/12/2012
通常排序后的结果是: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年
我不知道算法是如何工作的,我必须使用 only 1 radix sort
2 回答
您需要两次应用基数排序,首先是月份,然后是年份 . 如果您只使用基数排序一次,则必须对年份进行排序,但之后不会对您在同一年内的月份进行排序 . 也许您可以在一年内的月份中应用不同的算法,或者根本不使用基数排序 . 是否有一个特殊的原因,你只能排序一次?
可以考虑将日期排序在您所拥有的表示上,而不是在单独的排序键上 . 例如,对于日期01/02/2012,创建排序键20120201.现在,数字的顺序从最高到最低,您可以将排序键视为数字并对它们应用基数排序 .
如果您愿意,您不必显式创建排序键,但是您必须修改为一轮基数排序选择数字的代码以强制执行正确的顺序 .