Gia sư Cần Thơ, Dạy Kèm Cần Thơ

VỮNG TIN - TIẾP BƯỚC - THÀNH CÔNG


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

Share

ztanzzthanhz
Trung cấp
Trung cấp

Tổng số bài gửi : 60
Points : 100
Join date : 13/11/2009
Age : 26
Đến từ : Bến Tre

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

Bài gửi  ztanzzthanhz on Wed Jun 08, 2011 10:46 am

Đô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:

Code:

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)

    Hôm nay: Tue Aug 22, 2017 4:19 pm