Merge Sort
Cập nhật: 2026-08-10
Mục lục
1. Ý tưởng của Merge Sort
Merge Sort theo chiến lược chia để trị (divide and conquer): chia mảng làm đôi liên tục cho đến khi mỗi đoạn chỉ còn 1 phần tử (đã hiển nhiên "sắp xếp xong"), rồi trộn (merge) dần các đoạn đã sắp xếp lại với nhau theo thứ tự tăng dần, từ nhỏ đến lớn, cho tới khi trộn lại thành mảng hoàn chỉnh.
Bước trộn là trái tim của thuật toán: với hai đoạn con đã sắp xếp, ta dùng hai con trỏ i và j để luôn lấy ra phần tử nhỏ hơn giữa hai đầu đoạn, ghi vào một mảng tạm, rồi copy ngược lại vào mảng gốc.
2. Xem thuật toán chạy từng bước
Bấm Chạy để xem animation tự động, hoặc dùng Lùi / Tiến để đi qua từng bước một. Dải màu tím bên dưới hàng pin thể hiện đoạn con đang được xử lý (chia hoặc trộn); cột màu tím đậm là phần tử vừa được ghi vào đúng vị trí sau khi trộn.
Merge Sort
Gọi merge_sort trên đoạn [0, 9].
3. Độ phức tạp
| Merge Sort | |
|---|---|
| Thời gian (mọi trường hợp) | O(n log n) |
| Bộ nhớ phụ | O(n) — cần mảng tạm để trộn |
| Ổn định (stable) | Có |
Khác với Selection Sort hay Bubble Sort, Merge Sort đảm bảo O(n log n) trong mọi trường hợp (không phụ thuộc dữ liệu đầu vào), đổi lại phải trả thêm chi phí bộ nhớ O(n) cho mảng tạm. Đây cũng là thuật toán nền tảng cho external sort (sắp xếp dữ liệu không vừa RAM) và là một phần của Timsort — thuật toán sort mặc định của Python và Java.