Thuật toán insertion sort

Đơn giản vầy thôi :smile:
Bạn có một mảng chứa hầm bà lằng.

unsortedArray -> [1][9][6][2][3][6][9][0][5][4]

Bạn lấy [T] là một biến chứa thằng cuối cùng của phần mảng đã sắp xếp (bắt đầu sẽ là thằng unsortedArray[0]) và một biến /P/ làm vị trí (ngay sau thằng [T])
Sau đó bạn xét: Nếu thằng ở /P/ mà nhỏ hơn [T] thì bạn tạo một khoảng nhỏ để nhét thằng [P] vào sau [T]

[1][9][6][2][3][6][....  -> đùn nhau ra
       
[1] [ ... ] [9][6][2][3][...

      / <----- \
[1] [ ... ] [9][6][2][3][...

[1][6][9][2][3][...

Như vậy th.
Trong đoạn

for (int i = 1; i < n; i++)  //việc sắp xếp
{
int x = a[i];   // đây là [T]
int j = i;     // đây là /P/
while (j > 0 && a[j - 1] > x)  //đùn nhau ra để tạo khoảng trống
{
   a[j] = a[j - 1]; //lấp khoảng trống
   j--;
}
   a[j] = x;
}

Có gì chưa hiểu cứ reply :wink: