วันที่ (Date) ประกอบด้วยวัน เดือน และปี มีหลายรูปแบบในการแสดงวันที่
นี่คือโปรแกรมสำหรับเรียงลำดับวันที่โดยใช้ Selection Sort มาทำความเข้าใจสิ่งที่ใช้ในแนวคิดนี้
การเรียงลำดับวันที่
แนวคิดการเรียงลำดับวันที่ต้องการความรู้ที่ชัดเจนเกี่ยวกับวันที่และการตรวจสอบความถูกต้อง ก่อนลองเทคนิคการเรียง เราต้องตรวจสอบว่าวันที่ที่ผู้ใช้ป้อนเป็นวันที่ถูกต้องหรือไม่ เช่น 29-2 ถูกต้องเฉพาะในปีอธิกสุรทิน
หลังจากตรวจสอบความถูกต้องของวันที่แล้ว จึงมาถึงการเรียงลำดับ สำหรับการเรียง เราจะเรียงจากปีก่อน สำหรับปีเดียวกัน เรียงเดือน และสำหรับเดือนเดียวกัน เรียงวัน
Selection Sort
Selection Sort เป็นอัลกอริทึมการเรียงที่หาองค์ประกอบที่น้อยที่สุดและวางไว้ที่ต้นของอาร์เรย์ แล้วลดขนาดอาร์เรย์ลง ทำซ้ำจนเรียงครบทุกตัวในลำดับขึ้งไป
โปรแกรมนี้ใช้เทคนิค Selection Sort สำหรับเรียงวันที่ที่ผู้ใช้ป้อน
ลองรับ 3 วันที่เรียงไม่เป็นลำดับแล้วเรียงดู:
Input: 4 1 2012 31 5 2019 19 12 2012 Output: 4 1 2012 19 12 2012 31 5 2019
คำอธิบาย
เนื่องจากวันที่ทั้งหมดถูกต้อง โปรแกรมจะเรียงวันที่เหล่านี้ในลำดับขึ้งไป
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
struct date {
int day;
int month;
int year;
int valid = 1;
};
int datevalidate(int dd, int mm, int yy) {
if (yy >= 100 && yy <= 9999) {
if (mm >= 1 && mm <= 12) {
if ((dd >= 1 && dd <= 31) && (mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12));
else if ((dd >= 1 && dd <= 30) && (mm == 4 || mm == 6 || mm == 9 || mm == 11));
else if ((dd >= 1 && dd <= 28) && (mm == 2));
else if (dd == 29 && mm == 2 && (yy % 400 == 0 || (yy % 4 == 0 && yy % 100 != 0)));
else
return 0;
} else {
return 0;
}
} else {
return 0;
}
}
int main() {
cout << "Enter 5 dates to be sorted:\n";
struct date input[5];
for (int i = 0; i < 5; i++) {
cout << "Enter Date " << (i+1) << " : ";
cin >> input[i].day;
cin >> input[i].month;
cin >> input[i].year;
input[i].valid = datevalidate(input[i].day, input[i].month, input[i].year);
if (!input[i].valid) {
cout << "Date is invalid";
exit(0);
}
}
for (int i = 0; i < 4; i++) {
for (int j = i+1; j < 5; j++) {
if (input[i].year > input[j].year) {
struct date temp = input[i];
input[i] = input[j];
input[j] = temp;
} else if (input[i].year == input[j].year && input[i].month > input[j].month) {
struct date temp = input[i];
input[i] = input[j];
input[j] = temp;
} else if (input[i].year == input[j].year && input[i].month == input[j].month && input[i].day > input[j].day) {
struct date temp = input[i];
input[i] = input[j];
input[j] = temp;
}
}
}
cout << "Sorted dates are: \n";
for (int i = 0; i < 5; i++) {
cout << input[i].day << " " << input[i].month << " " << input[i].year;
cout << endl;
}
}
ผลลัพธ์
Enter 5 dates to be sorted: Enter date 1: 5 12 2019 Enter date 2: 1 2 2012 Enter date 3: 11 6 2324 Enter date 4: 29 2 2652 Enter date 5: 16 5 2012 Sorted dates are: 1 2 2012 16 5 2012 5 12 2019 11 6 2324 29 2 2652