menu_book LESSON MODE

Lưu Đồ Ch.6 — Thuật Toán Sắp Xếp

calendar_today Đăng 31 May 2026
Lưu Đồ Ch.6 — Thuật Toán Sắp Xếp
school

NOW LEARNING

Lưu Đồ Ch.6 — Thuật Toán Sắp Xếp

📐 Lưu Đồ & Thuật Toán · Tin học THPT
🫧
Chapter 6 · Lưu Đồ & Thuật Toán

Thuật Toán
Sắp Xếp

Bubble Sort, Selection Sort, Insertion Sort — 3 thuật toán sắp xếp cơ bản và cách biểu diễn bằng lưu đồ!

🫧 Bubble Sort

So sánh cặp liền kề, đẩy phần tử lớn lên cuối

Ý tưởng: Duyệt mảng nhiều lần. Mỗi lần so sánh 2 phần tử liền kề — nếu sai thứ tự thì đổi chỗ. Phần tử lớn nhất "nổi" dần về cuối như bọt khí.

Mảng ban đầu: [5, 3, 8, 1, 4]
5
0
3
1
8
2
1
3
4
4
Sau vòng 1: Phần tử lớn nhất (8) về cuối ↓
3
0
5
1
1
2
4
3
8
4✓
Kết quả cuối: [1, 3, 4, 5, 8] ✅
1
0
3
1
4
2
5
3
8
4
FOR i = 0 TO n-2 DO FOR j = 0 TO n-2-i DO IF A[j] > A[j+1] THEN tam = A[j] ← hoán đổi A[j] = A[j+1] A[j+1] = tam
Vòng iVòng jSo sánhHoán đổi?Mảng sau bước
00A[0]=5 > A[1]=3✓ Đổi[3,5,8,1,4]
01A[1]=5 > A[2]=8?✗ Không[3,5,8,1,4]
02A[2]=8 > A[3]=1✓ Đổi[3,5,1,8,4]
03A[3]=8 > A[4]=4✓ Đổi[3,5,1,4,8]
... tiếp tục các vòng i=1,2,3 ...[1,3,4,5,8] ✅
💡
Hoán đổi 3 bước — cần biến tạm! Không thể viết A[j]=A[j+1]; A[j+1]=A[j] vì sẽ mất dữ liệu. Phải dùng biến tam làm trung gian!
🎯 Selection Sort

Mỗi vòng chọn phần tử nhỏ nhất → đặt vào đầu

Ý tưởng: Mỗi vòng lặp i, tìm phần tử nhỏ nhất trong A[i..n-1], rồi hoán đổi nó với A[i]. Sau i vòng, i phần tử đầu đã được sắp xếp đúng.

[5, 3, 8, 1, 4] → Vòng 1: Tìm min từ vị trí 0
5
i=0
3
1
8
2
1
min
4
4
Đổi A[0]↔A[3]: [1, 3, 8, 5, 4] — 1 đã đúng vị trí ✓
1
3
4
5
8
FOR i = 0 TO n-2 DO min_idx = i ← giả sử phần tử i là nhỏ nhất FOR j = i+1 TO n-1 DO IF A[j] < A[min_idx] THEN min_idx = j ← cập nhật vị trí min IF min_idx ≠ i THEN Hoán đổi A[i] ↔ A[min_idx]
Vòng iTìm min trongmin_idxHoán đổiMảng
0A[0..4]3 (giá trị 1)A[0]↔A[3][1,3,8,5,4]
1A[1..4]1 (giá trị 3)Không đổi[1,3,8,5,4]
2A[2..4]4 (giá trị 4)A[2]↔A[4][1,3,4,5,8]
3A[3..4]3 (giá trị 5)Không đổi[1,3,4,5,8] ✅
📌 Insertion Sort

Lấy từng phần tử chèn vào đúng vị trí trong phần đã sắp xếp

Giống như sắp xếp bài trong tay khi chơi bài — mỗi lần nhận bài mới, chèn vào đúng chỗ trong những lá đã sắp.

[5, 3, 8, 1, 4] — Xem từng phần tử và chèn vào đúng chỗ
5
đã có
3
chèn
8
2
1
3
4
4
3 < 5 → chèn 3 vào trước 5: [3, 5, 8, 1, 4]
FOR i = 1 TO n-1 DO key = A[i] ← phần tử cần chèn j = i - 1 WHILE j ≥ 0 AND A[j] > key DO A[j+1] = A[j] ← dịch phải j = j - 1 A[j+1] = key ← đặt vào đúng chỗ
ikeyDịch phần tửMảng sau chèn
135 → dịch phải[3,5,8,1,4]
28Không dịch[3,5,8,1,4]
318,5,3 → dịch phải[1,3,5,8,4]
448,5 → dịch phải[1,3,4,5,8] ✅
⚖️

Độ phức tạp & Khi nào dùng cái nào?

Thuật toánTốt nhấtTrung bìnhTệ nhấtNên dùng khi
Bubble Sort O(n) O(n²) O(n²) Học thuật, mảng nhỏ ≤ 20
Selection Sort O(n²) O(n²) O(n²) Ít thao tác hoán đổi nhất
Insertion Sort O(n) O(n²) O(n²) Mảng gần đã sắp xếp
📚 Ghi nhớ cho kỳ thi: Cả 3 thuật toán đều có độ phức tạp O(n²) ở trường hợp tệ nhất. Trong thực tế có các thuật toán nhanh hơn như Merge Sort O(n log n), Quick Sort O(n log n) — sẽ học ở lớp cao hơn.

🧩 Kiểm tra nhanh!

Chapter 6 — Thuật toán sắp xếp

1️⃣Bubble Sort so sánh các phần tử thế nào?
→ So sánh từng cặp liền kề, đổi nếu sai thứ tự
2️⃣Selection Sort chọn và đặt phần tử nào?
→ Chọn phần tử nhỏ nhất đặt vào đầu dãy chưa sắp
3️⃣Hoán đổi 2 phần tử cần mấy bước? Tại sao?
→ 3 bước — cần biến tam để không mất dữ liệu
4️⃣Sắp xếp [4,2,7,1] bằng Selection Sort vòng 1: kết quả?
→ [1,2,7,4] — đổi 4 và 1
Series: Chapter 6 / 8
🫧
🔍
Tiếp theo · Chapter 7
Thuật Toán Tìm Kiếm
Linear Search và Binary Search — vẽ lưu đồ, so sánh hiệu quả và truy vết từng bước!

NEXT STEP

Tiếp theo nên học gì

route