Ordenar una array de strings de fechas en orden ascendente

Dada una serie de strings de fechas [] , la tarea es ordenar estas fechas en orden ascendente. 
Nota: Cada fecha tiene la forma dd mmm aaaa donde: 
 

  • El dominio de dd es [0-31] .
  • El dominio de mmm es [ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic] .
  • Y, yyyy es un número entero de cuatro dígitos.

Ejemplos: 
 

Entrada: fechas[] = {“01 de marzo de 2015”, “11 de abril de 1996”, “22 de octubre de 2007”} 
Salida: 
11 de abril de 1996 
22 de octubre de 2007 
01 de marzo de 2015
Entrada: fechas[] = {“03 de enero de 2018”, “ 02 de enero de 2018”, “04 de enero de 2017”} 
Salida: 
04 de enero de 2017 
02 de enero de 2018 
03 de enero de 2018 
 

Enfoque: extraiga los días , meses y años como substrings de la string y luego compare dos strings por años ; si los años de dos fechas son iguales, compare sus meses . Si además los meses son iguales a los días se decidirá qué fecha aparece antes en el calendario.
A continuación se muestra la implementación del enfoque anterior:
 

CPP

// C++ program to sort the dates in a string array
#include <bits/stdc++.h>
using namespace std;
 
// Map to store the numeric value of each month depending on
// its occurrence i.e. Jan = 1, Feb = 2 and so on.
unordered_map<string, int> monthsMap;
 
// Function which initializes the monthsMap
void sort_months()
{
    monthsMap["Jan"] = 1;
    monthsMap["Feb"] = 2;
    monthsMap["Mar"] = 3;
    monthsMap["Apr"] = 4;
    monthsMap["May"] = 5;
    monthsMap["Jun"] = 6;
    monthsMap["Jul"] = 7;
    monthsMap["Aug"] = 8;
    monthsMap["Sep"] = 9;
    monthsMap["Oct"] = 10;
    monthsMap["Nov"] = 11;
    monthsMap["Dec"] = 12;
}
 
// Comparator function to sort an array of dates
bool comp(string a, string b)
{
 
    // Comparing the years
    string str1 = a.substr(7, 5);
    string str2 = b.substr(7, 5);
    if (str1.compare(str2) != 0) {
        if (str1.compare(str2) < 0)
            return true;
        return false;
    }
 
    // Comparing the months
    string month_sub_a = a.substr(3, 3);
    string month_sub_b = b.substr(3, 3);
 
    // Taking numeric value of months from monthsMap
    int month_a = monthsMap[month_sub_a];
    int month_b = monthsMap[month_sub_b];
    if (month_a != month_b) {
        return month_a < month_b;
    }
 
    // Comparing the days
    string day_a = a.substr(0, 2);
    string day_b = b.substr(0, 2);
    if (day_a.compare(day_b) < 0)
        return true;
    return false;
}
 
// Utility function to print the contents
// of the array
void printDates(string dates[], int n)
{
    for (int i = 0; i < n; i++) {
        cout << dates[i] << endl;
    }
}
 
// Driver code
int main()
{
    string dates[] = { "24 Jul 2017", "25 Jul 2017", "11 Jun 1996",
                       "01 Jan 2019", "12 Aug 2005", "01 Jan 1997" };
    int n = sizeof(dates) / sizeof(dates[0]);
 
    // Order the months
    sort_months();
 
    // Sort the dates
    sort(dates, dates + n, comp);
 
    // Print the sorted dates
    printDates(dates, n);
}

Python3

# Python3 program to sort the dates in a string array
 
# Map to store the numeric value of each month depending on
# its occurrence i.e. Jan = 1, Feb = 2 and so on.
monthsMap=dict()
 
# Function which initializes the monthsMap
def sort_months():
 
    monthsMap["Jan"] = 1
    monthsMap["Feb"] = 2
    monthsMap["Mar"] = 3
    monthsMap["Apr"] = 4
    monthsMap["May"] = 5
    monthsMap["Jun"] = 6
    monthsMap["Jul"] = 7
    monthsMap["Aug"] = 8
    monthsMap["Sep"] = 9
    monthsMap["Oct"] = 10
    monthsMap["Nov"] = 11
    monthsMap["Dec"] = 12
 
def cmp(date):
    date=date.split()
    return int(date[2]),monthsMap[date[1]],int(date[0]),
 
 
# Utility function to print the contents
# of the array
def printDates(dates, n):
    for i in range(n):
        print(dates[i])
 
# Driver code
if __name__ == '__main__':
 
    dates = [ "24 Jul 2017", "25 Jul 2017", "11 Jun 1996",
                       "01 Jan 2019", "12 Aug 2005", "01 Jan 1997" ]
    n = len(dates)
 
    # Order the months
    sort_months()
 
    # Sort the dates
    dates.sort(key=cmp)
 
    # Print the sorted dates
    printDates(dates, n)
 
# This code is contributed by Amartya Ghosh
Producción: 

11 Jun 1996
01 Jan 1997
12 Aug 2005
24 Jul 2017
25 Jul 2017
01 Jan 2019

 

Complejidad de tiempo : O(N * log(N))  
Espacio auxiliar : O(1)

Publicación traducida automáticamente

Artículo escrito por aatif y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *