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.
Khái quát¶
Xem lại khái quát về bài toán và thuật toán sắp xếp tại đây.
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:
Duyệt từng phần tử A[i] từ 1 đến cuối mảng, 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]đứng trước nó) -
Duyệt từng phần tử
A[j]từi - 1ngược về đầu mảng,lặp các theo tác: dịch chuyểnA[j]sang phải một vị trí.Vòng lặp dừng lại khi hết phần tử
A[j]để xét (j < 0) hoặc gặpA[j]nào đó không lớn hơnA[i](A[j] <= t). -
"Chèn
A[i]vào chỗ trống" bằng cách gántchoA[j + 1].(Vì sau khi vòng lặp của bước 2 dừng,
jlà vị trí của phần tử bị bắt gặp không còn lớn hơnA[i], vàj + 1là vị trí màA[i]chèn vào).
Thuật toán có thể được phác hoạ như hình sau:
Ví dụ minh hoạ¶
Lưu đồ¶
Trực quan hoá¶
Viết chương trình¶
1. Nạp thư viện numpy.
2. 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 dừng,
jlà vị trí màA[j]nhỏ hơn hoặc bằngA[i], cònj + 1là vị trí sẽ đượcA[i]đứng chèn vào.
3. Viết chương trình chính.
Trong chương trình chính, ta tạm thời bỏ qua việc cho người dùng nhập mảng. Thay vào đó, ta khởi tạo mảng cố định, rồi gọi hàm insertion_sort() để sắp xếp mảng Array.
4. Chạy chương trình trên, kết quả như sau:
Mã nguồn¶
Code đầy đủ được đặt tại:
Sơ đồ tóm tắt¶
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 |