How to sort an array of dates in C/C++?

2

Given an array of dates, how to sort them.

Example:

Input:
       Date arr[] = {{20,  1, 2014},
                    {25,  3, 2010},
                    { 3, 12, 1676},
                    {18, 11, 1982},
                    {19,  4, 2015},
                    { 9,  7, 2015}}

Output:
      Date arr[] = {{ 3, 12, 1676},
                    {18, 11, 1982},
                    {25,  3, 2010},
                    {20,  1, 2014},
                    {19,  4, 2015},
                    { 9,  7, 2015}}

We strongly recommend you to minimize your browser and try this yourself first
The idea is to use in-built function to sort function in C++. We can write our own compare function that first compares years, then months, then days.

Below is complete C++ program.

// C++ program to sort an array of dates
#include<bits/stdc++.h>
using namespace std;

// Structure for date
struct Date
{
    int day, month, year;
};

// This is the compare function used by in-built sort
// function to sort the array of dates.
// It takes two Dates as parameters (const is
// given to tell the compiler that the value won't be
// changed during the compare - this is for optimisation..)

// Returns true if dates have to be swapped and returns
// false if not. Since we want ascending order, we return
// true if first Date is less than second date
bool compare(const Date &d1, const Date &d2)
{
    // All cases when true should be returned
    if (d1.year < d2.year)
        return true;
    if (d1.year == d2.year && d1.month < d2.month)
        return true;
    if (d1.year == d2.year && d1.month == d2.month &&
                              d1.day < d2.day)
        return true;

    // If none of the above cases satisfy, return false
    return false;
}

// Function to sort array arr[0..n-1] of dates
void sortDates(Date arr[], int n)
{
    // Calling in-built sort function.
    // First parameter array beginning,
    // Second paramter - array ending,
    // Third is the custom compare function
    sort(arr, arr+n, compare);
}

// Driver Program
int main()
{
    Date arr[] = {{20,  1, 2014},
                  {25,  3, 2010},
                  { 3, 12, 1676},
                  {18, 11, 1982},
                  {19,  4, 2015},
                  { 9,  7, 2015}};
    int n = sizeof(arr)/sizeof(arr[0]);

    sortDates(arr, n);

    cout << "Sorted dates are\n";
    for (int i=0; i<n; i++)
    {
        cout << arr[i].day << " " << arr[i].month
             << " " << arr[i].year;
        cout << endl;
    }
}

Output:

Sorted dates are
3 12 1676
18 11 1982
25 3 2010
20 1 2014
19 4 2015
9 7 2015

Similarly in C, we can use qsort() function.

Related Problem:
How to efficiently sort a big list dates in 20’s

This article is contributed by Dinesh T.P.D. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:



2 Average Difficulty : 2/5.0
Based on 1 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.