using
System;
public
class
GFG
{
static
int
getMax(
int
[,]arr,
int
n,
int
q)
{
int
maxi =
int
.MinValue;
for
(
int
i = 0; i < n; i++)
{
maxi = Math.Max(maxi, arr[i,q]);
}
return
maxi;
}
static
void
sortDatesUtil(
int
[,]arr,
int
n,
int
q)
{
int
maxi = getMax(arr,n,q);
int
p = 1;
while
(maxi > 0)
{
int
[]cnt =
new
int
[10];
for
(
int
i = 0; i < n; i++)
{
cnt[(arr[i,q]/p) % 10]++;
}
for
(
int
i = 1; i < 10; i++)
{
cnt[i] += cnt[i - 1];
}
int
[,]ans =
new
int
[n,3];
for
(
int
i = n - 1; i >= 0; i--)
{
int
lastDigit = (arr[i,q]/p) % 10;
for
(
int
j = 0; j < 3; j++)
{
ans[cnt[lastDigit]-1,j]
=arr[i,j];
}
cnt[lastDigit]--;
}
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < 3; j++)
{
arr[i,j] = ans[i,j];
}
}
p *= 10;
maxi /= 10;
}
}
static
void
sortDates(
int
[,]dates,
int
n)
{
sortDatesUtil(dates, n, 0);
sortDatesUtil(dates, n, 1);
sortDatesUtil(dates, n, 2);
}
static
void
printArr(
int
[,]arr,
int
n)
{
for
(
int
i = 0; i < 6; i++)
{
for
(
int
j = 0; j < 3; j++)
{
Console.Write(arr[i, j] +
" "
);
}
Console.WriteLine();
}
}
public
static
void
Main(String[] args)
{
int
[,]dates = {{20, 1, 2014},
{25, 3, 2010},
{ 3, 12, 2000},
{18, 11, 2000},
{19, 4, 2015},
{ 9, 7, 2005}};
int
n = dates.GetLength(0);
sortDates(dates,n);
Console.Write(
"\nSorted Dates\n"
);
printArr(dates,n);
}
}