Sort an array of string of dates in ascending order - GeeksforGeeks

03 Nov, 2021
Given an array of strings dates[], the task is to sort these dates in ascending order. Note: Each date is of the form dd mmm yyyy where:  
Domain of dd is [0-31].
Domain of mmm is [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec].
And, yyyy is a four digit integer.
Examples:  
Input: dates[] = {“01 Mar 2015”, “11 Apr 1996”, “22 Oct 2007”} Output: 11 Apr 1996 22 Oct 2007 01 Mar 2015Input: dates[] = {“03 Jan 2018”, “02 Jan 2018”, “04 Jan 2017”} Output: 04 Jan 2017 02 Jan 2018 03 Jan 2018  
 
Approach: Extract the days, months and years as sub-strings from the string then compare two strings by years, if years for two dates are equal then compare their months. If months are also equal than the days will decide which date appears earlier in the calendar.Below is the implementation of the above approach: 
CPP
Python3
// 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 monthsMapvoid 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 datesbool 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 arrayvoid printDates(string dates[], int n){    for (int i = 0; i < n; i++) {        cout << dates[i] << endl;    }} // Driver codeint 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 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 monthsMapdef 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 arraydef printDates(dates, n):    for i in range(n):        print(dates[i]) # Driver codeif __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
11 Jun 1996
01 Jan 1997
12 Aug 2005
24 Jul 2017
25 Jul 2017
01 Jan 2019
 
Time Complexity: O(N * log(N))  Auxiliary Space: O(1)
pankajsharmagfg
amartyaghoshgfg
Sorting Quiz
Arrays
C++ Programs
Data Structures
Sorting
Data Structures
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Multidimensional Arrays in Java
Maximum and minimum of an array using minimum number of comparisons
Header files in C/C++ and its uses
C++ Program for QuickSort
How to return multiple values from a function in C or C++?
CSV file management using C++
Program to print ASCII Value of a character