Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ sắp xếp ngày tháng dùng Selection Sort


Ngày (Date) bao gồm ngày, tháng, năm. Có nhiều cách hiển thị ngày.

Đây là chương trình sắp xếp ngày tháng bằng Selection Sort. Hãy tìm hiểu các khái niệm liên quan.

Sắp xếp ngày tháng

Việc sắp xếp ngày tháng đòi hỏi kiến thức rõ ràng về ngày tháng và xác thực. Trước khi sắp xếp, cần kiểm tra ngày nhập có hợp lệ không (ví dụ 29-2 chỉ hợp lệ năm nhuận).

Sau khi xác thực, ta sắp xếp theo thứ tự ngược: năm trước, sau đó tháng, cuối cùng ngày.

Selection Sort (Sắp xếp chọn)

Selection Sort là thuật toán sắp xếp tìm phần tử nhỏ nhất đặt lên đầu mảng, rồi thu hẹp mảng. Do đó đặt từng phần tử vào vị trí đúng theo thứ tự tăng dần.

Chương trình dùng Selection Sort để sắp xếp các ngày do người dùng nhập.

Ví dụ

Input: 4 1 2012  31 5 2019  19 12 2012 
Output: 4 1 2012  19 12 2012  31 5 2019

Giải thích

Vì tất cả ngày đều hợp lệ, chương trình sắp xếp chúng theo thứ tự tăng dần.

Ví dụ mã C++

#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 << "Nhập 5 ngày cần sắp xếp:\n"; 
    struct date input[5]; 
    for (int i = 0; i < 5; i++) { 
        cout << "Nhập ngày " << (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 << "Ngày không hợp lệ"; 
            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 << "Các ngày sau sắp xếp: \n"; 
    for (int i = 0; i < 5; i++) { 
        cout << input[i].day << " " << input[i].month << " " << input[i].year; 
        cout << endl; 
    } 
}

Kết quả

Nhập 5 ngày cần sắp xếp: 
Nhập ngày 1: 5 12 2019 
Nhập ngày 2: 1 2 2012 
Nhập ngày 3: 11 6 2324 
Nhập ngày 4: 29 2 2652 
Nhập ngày 5: 16 5 2012 
Các ngày sau sắp xếp: 
1 2 2012 
16 5 2012 
5 12 2019 
11 6 2324 
29 2 2652