Sắp xếp dãy số giảm dần, tăng dần

Trong lập trình, sắp xếp dãy số theo thứ tự tăng dần hay giảm dần là một bài toán cơ bản mà ai ai cũng phải đối mặt. Điều này cũng áp dụng cho việc sắp xếp mảng 1 chiều tăng dần/giảm dần. Bài viết này sẽ giúp bạn giải quyết bài toán sắp xếp mảng 1 chiều theo thứ tự tăng dần và giảm dần.

Dãy số hay là mảng?

Khi bạn gặp các câu hỏi sau:

  • Sắp xếp dãy số tự nhiên tăng dần/giảm dần
  • Sắp xếp mảng số thực tăng dần/giảm dần
  • Sắp xếp mảng 1 chiều các số tự nhiên tăng/giảm dần

Cả ba câu hỏi này đều có liên quan đến việc sắp xếp dữ liệu trên mảng 1 chiều. Khi nhắc tới “dãy số”, bạn nên nghĩ ngay tới mảng 1 chiều. Dưới đây là một số lưu ý trước khi tiếp tục đọc bài viết:

  • Bạn cần có kiến thức về mảng 1 chiều để hiểu rõ bài viết này.
  • Có nhiều thuật toán sắp xếp khác nhau, bạn có thể tham khảo thêm.
  • Có sẵn bài tập mảng 1 chiều có lời giải để bạn tham khảo.

Sắp xếp dãy số giảm dần

Trong đoạn code dưới đây, tôi sẽ sử dụng thuật toán sắp xếp chọn – một thuật toán cơ bản và dễ hiểu nhất.

Đầu tiên, hãy xem hình dưới đây để hiểu ý tưởng sắp xếp:

Sắp xếp dãy số tăng dần

Dưới đây là đoạn code sắp xếp mảng/dãy số giảm dần với ngôn ngữ C/C++:

#include 

void SapXepGiamDan(int a[], int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (a[i] < a[j])
            {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}

int main()
{
    int n;
    printf("Nhap so phan tu cua mang: ");
    scanf("%d", &n);

    int a[n];
    printf("Nhap cac phan tu cua mang:n");
    for (int i = 0; i < n; i++)
    {
        printf("Phan tu thu %d: ", i + 1);
        scanf("%d", &a[i]);
    }

    SapXepGiamDan(a, n);

    printf("Mang sau khi sap xep giam dan: ");
    for (int i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }

    return 0;
}

Chạy thử:

Nhap so phan tu cua mang: 5
Nhap cac phan tu cua mang:
Phan tu thu 1: 9
Phan tu thu 2: 5
Phan tu thu 3: 3
Phan tu thu 4: 2
Phan tu thu 5: 7
Mang sau khi sap xep giam dan: 9 7 5 3 2

Sắp xếp dãy số tăng dần

Việc sắp xếp dãy số tăng dần chỉ khác sắp xếp giảm dần duy nhất ở bước kiểm tra điều kiện để hoán vị.

Chạy thử:

Nhap so phan tu cua mang: 5
Nhap cac phan tu cua mang:
Phan tu thu 1: 9
Phan tu thu 2: 5
Phan tu thu 3: 3
Phan tu thu 4: 2
Phan tu thu 5: 7
Mang sau khi sap xep tang dan: 2 3 5 7 9

Sắp xếp dãy số tăng, giảm dần với hàm

Việc sử dụng hàm giúp mã nguồn trở nên rõ ràng, dễ đọc và dễ quản lý. Với bài toán này, chúng ta có thể viết 4 hàm riêng biệt sau:

  • NhapMang: Hàm này sẽ nhập mảng từ bàn phím.
  • XuatMang: Hàm này sẽ xuất mảng ra màn hình.
  • TangDan: Hàm này sắp xếp mảng theo thứ tự tăng dần.
  • GiamDan: Hàm này sắp xếp mảng theo thứ tự giảm dần.

Chạy chương trình:

Nhap so phan tu cua mang: 5
Nhap cac phan tu cua mang:
Phan tu thu 1: 9
Phan tu thu 2: 5
Phan tu thu 3: 3
Phan tu thu 4: 2
Phan tu thu 5: 7
Mang sau khi sap xep tang dan: 2 3 5 7 9
Mang sau khi sap xep giam dan: 9 7 5 3 2

Chú ý:

  • Với số thực hay kiểu ký tự (char), bạn cũng có thể áp dụng cách tương tự. Chỉ cần sửa kiểu dữ liệu của mảng, cách nhập và xuất dữ liệu. Phần thuật toán sắp xếp vẫn giữ nguyên.
  • Đây chỉ là một thuật toán sắp xếp đơn giản và dễ cài đặt nhất. Bạn có thể thử triển khai bằng các thuật toán sắp xếp khác.

Tóm lại, sắp xếp dãy số giảm dần và tăng dần là hai bài toán cơ bản trong lập trình. Bằng việc nắm vững kiến thức về mảng 1 chiều và các thuật toán sắp xếp, bạn sẽ có thể giải quyết những bài toán liên quan một cách dễ dàng và hiệu quả.

FEATURED TOPIC

hihi