Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เรียงลำดับวันที่ด้วย Selection Sort

วันที่ (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