Code:

#include "stdio.h"
#include "conio.h"

typedef struct NgayThang{
  unsigned char Ngay;
  unsigned char Thang;
  unsigned int Nam;
};
typedef struct NgayThang * ptrNgayThang;

//nhap ngay thang
NgayThang Nhap()
{
   NgayThang nT;
   printf("\tNhap ngay: ");
   scanf("%d",&nT.Ngay);
   printf("\tNhap thang: ");
   scanf("%d",&nT.Thang);
   printf("\tNhap nam: ");
   scanf("%d",&nT.Nam);
   return nT;
}
//nhap n ngay thang
ptrNgayThang Nhap(unsigned int n) {
   ptrNgayThang temp = new NgayThang[n];
   for(unsigned int i = 0; i<n; i++)
   {
      printf("Nhap ngay thu %d: \n",i);
      temp[i] = Nhap();
   }
   return temp;
}
//xuat 1 ngay thang
void Xuat(NgayThang nT)
{
   printf("%d-%d-%d  ",nT.Ngay,nT.Thang,nT.Nam);
}
//xuat n ngay thang
void Xuat(ptrNgayThang temp, unsigned int n) {
   for(unsigned int i = 0; i<n; i++)
   {
      Xuat(temp[i]);
   }
}
//sap xep theo nam
void Bubble_Sort_Year(ptrNgayThang A, unsigned int n){
   NgayThang temp;
   for(unsigned int i = 0; i<n-1; i++)
      for(unsigned int j = n-1; j>i;j--)
      if(A[j].Nam<A[j-1].Nam)
      {
         temp = A[j];
         A[j] = A[j-1];
         A[j-1] = temp;
      }
}

//chuong trinh chinh
void main()
{
   clrscr();
   ptrNgayThang p;
   unsigned int n;
   printf("Nhap vao so diem n = ");
   scanf("%d",&n);
   p = Nhap(n);
   
   printf("Danh sach ngay thang vua nhap:\n");
   Xuat(p,n);
   
   Bubble_Sort_Year(p,n);
   
   printf("\nDanh sach vua sap xep:\n");
   Xuat(p,n);
   getch();
}