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