Sắp xếp chèn¶
Tóm lược nội dung
Bài này trình bày thuật toán sắp xếp chèn.
Bài toán và thuật toán sắp xếp¶
Tương tự bài học trước, ta chỉ xét bài toán đơn giản là sắp xếp mảng một chiều các số nguyên theo thứ tự tăng dần.
Về thuật toán, bài học này đề cập thuật toán sắp xếp chèn.
Thuật toán sắp xếp chèn¶
Ý tưởng¶
Hãy tưởng tượng hình ảnh cả lớp đang xếp một hàng dọc.
Xét một bạn Tèo nào đó. Lần lượt các bạn đứng trước Tèo mà cao hơn Tèo thì lùi về sau một vị trí, cho đến khi gặp một bạn không cao hơn Tèo thì dừng. Lúc này, do các bạn cao đã lùi về sau, một chỗ trống sẽ lộ ra cho Tèo đứng chèn vào.
Dựa vào cách thức trên, ý tưởng chính của thuật toán sắp xếp chèn là lặp lại nhiều lần thao tác di chuyển một phần tử lên trước các phần tử lớn hơn nó. Cụ thể như sau:
Thuật toán sắp xếp chèn
Duyệt mảng A
từ vị trí 1
đến cuối bằng biến i
. Ứng với mỗi i
, thực hiện ba thao tác:
-
Lưu giá trị của
A[i]
vào biến tạmt
. (VìA[i]
sẽ bị ghi đè bởi các phần tửA[j]
trong thao tác tiếp theo) -
Khởi tạo
j = i – 1
.Dùng vòng lặp while, duyệt mảng con từ vị trí
i - 1
ngược về đầu mảng bằng biếnj
. Ứng với mỗij
, thực hiện dịch chuyểnA[j]
về sau một vị trí.Vòng lặp while dừng khi gặp phần tử
A[j]
nào đó bằngt
(tức bằngA[i]
) hoặcj
đã đến vị trí đầu mảng, không cònA[j]
nào để xét. -
Chèn
A[i]
vào "chỗ trống" bằng cách gán biến tạmt
choA[j + 1]
(Vì sau khi vòng lặp while dừng,j
là vị trí màA[j]
không còn lớn hơnA[i]
nữa, vàj + 1
là vị trí màA[i]
được chèn vào).
Ví dụ¶
Lưu đồ thuật toán¶
Trực quan hóa thuật toán¶
Chương trình minh họa¶
- Sau khi vòng lặp while kết thúc,
j
là vị trí màA[j]
nhỏ hơn hoặc bằngA[i]
, cònj + 1
là vị trí sẽ đượcA[i]
đứng chèn vào.
Output:
Sơ đồ tóm tắt nội dung¶
Google Colab¶
Các đoạn mã trong bài này được đặt tại Google Colab để bạn có thể thử nghiệm theo cách của riêng mình.
Some English words¶
Vietnamese | Tiếng Anh |
---|---|
biến tạm thời | temporatory variable |
hoán vị (hai phần tử) | swap |
sắp xếp chèn | insertion sort |
so sánh | compare |