+ Trả lời chủ đề
Hiện kết quả từ 1 tới 1 của 1

Chủ đề: Sắp xếp tăng, sắp xếp giảm chỉ cần 1 hàm

  1. #1
    Status : ngovanhieu_Alpha đang ẩn
    Tham gia ngày : Aug 2011
    Bài gửi : 200

    Sắp xếp tăng, sắp xếp giảm chỉ cần 1 hàm

    Sắp xếp tăng, sắp xếp giảm chỉ cần 1 hàm
    Đôi lúc trong cùng 1 bài tập, bạn vừa cần sắp xếp 1 mãng tăng, 1 mãng giảm. Không cần phải viết 2 hàm, cũng không cần phải chia ra 2 trường hợp để giải. Bạn có thể viết 1 hàm như sau:

    Mã:
    void BubbleSort(int A[], int n, int index) // index = 1 : sap xep tang;    index = 0 : sap xep giam;
    {
        for (int i=n-1; i>0; i--)
            for (int j=0; j<i; j++)
                if ((A[j] > A[j+1]) == index)
                {
                    int temp = A[j];
                    A[j] = A[j+1];
                    A[j+1] = temp;
                }
    }
    Ví dụ:

    + Khi cần sắp xếp mãng A có n phần tử theo chiều tăng dần: BubbleSort(A, n, 1);

    + Khi cần sắp xếp mãng B có m phần tử theo chiều giảm dần: BubbleSort(B, m, 0);


    Giải thích:

    Mấu chốt vấn đề là ở câu điều kiện: (A[j] > A[j+1]) == index

    + Nếu ta đang cần sắp xếp tăng, tức là index = 1 (hay True).
    Khi điều kiện A[j] > A[j+1] đúng (tức là số trước lớn hơn số sau) thì ta sẽ đổi chỗ; Đúng tức là = True, vậy khi đó (A[j] > A[j+1]) == index

    + Nếu ta đang cần sắp xếp giảm, tức là index = 0 (hay False).
    Khi điều kiện A[j] > A[j+1] sai (tức là số trước KHÔNG lớn hơn số sau) thì ta sẽ đổi chỗ; Sai tức là = False, vậy khi đó (A[j] > A[j+1]) == index

    Vậy điều kiện (A[j] > A[j+1]) == index là đúng cho cả 2 trường hợp sắp xếp tăng và giảm.

    (Dương Tấn Thành)
    Lần sửa cuối bởi ngovanhieu_Alpha; 06-08-2011 lúc 03:12 PM

+ Trả lời chủ đề

Quyền viết bài

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
Trang Chủ Việc Làm Gia Sư Gia sư