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.
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 từng phần tử A[i]
từ từ vị trí 1
đến cuối, lặp các thao tác sau:
-
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) -
Duyệt từng phần tử
A[j]
của mảng con từ vị tríi - 1
ngược về đầu mảng (vị trí0
), cho đến khi gặpA[j]
nhỏ hơn hoặc bằngA[i]
, lặp các theo tác: dịch chuyểnA[j]
một vị trí về phía cuối mảng. -
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).
Minh hoạ¶
Lưu đồ¶
Trực quan hoá¶
Viết chương trình¶
Khai báo thư viện numpy
.
Viết hàm insertion_sort()
để thực hiện thuật toán sắp xếp chèn.
- 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.
Trong chương trình chính, ta gọi hàm insertion_sort()
ra thực hiện sắp xếp mảng Array
.
Output:
Sơ đồ tóm tắt¶
Mã nguồn¶
Các đoạn mã trong bài được đặt tại:
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 |