@techtipsvn
Thuật toán sắp xếp · Selection sort

Cùng O(n²) với bubble sort, nhưng selection sort chỉ đổi chỗ n-1 lần

Cùng O(n²) với bubble sort, nhưng ghi ít hơn hẳn.

2026-08-1908 slide2 phút đọcGiải thích
Slide bìa: Cùng O(n²) với bubble sort, nhưng selection sort chỉ đổi chỗ n-1 lầnSlide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8
cuộn, vuốt, hoặc phím ←→01 / 08

Cùng một bài, đọc bằng chữ. Nhanh hơn và tìm lại được bằng Ctrl+F.

Mỗi lượt tìm số nhỏ nhất

Mảng chia hai bởi một ranh giới: bên trái đã sắp xếp, bên phải chưa. Mỗi lượt tìm số nhỏ nhất bên phải, đưa về sát ranh giới, rồi đẩy ranh giới sang một bước.

Ví dụ

[5, 1, 4, 2, 8] → [1, 5, 4, 2, 8] → [1, 2, 4, 5, 8]

Ranh giới chạy dần sang phải

  1. Lượt 1Cả mảng chưa sắp: 5 1 4 2 8. Nhỏ nhất là 1, đưa lên đầu
  2. Lượt 2Đã sắp: 1. Còn 5 4 2 8, nhỏ nhất là 2
  3. Lượt 3Đã sắp: 1 2. Còn 4 5 8, nhỏ nhất là 4, đã đúng chỗ
  4. XongRanh giới chạm cuối mảng. Mỗi lượt tốn tối đa một lần đổi chỗ

Trường hợp xấu nhất, so sánh bằng nhau

Thuật toánSo sánhĐổi chỗ
Bubblen²/2-tới n²/2
Selectionn²/2+n-1

Mảng đã đúng thứ tự thì sao

Bubble sort có cờ dừng sớm nên chỉ tốn n-1 phép so sánh rồi dừng. Selection sort vẫn quét đủ n²/2 lần, vì nó không có cách nào biết mảng đã xong từ trước.

Khi nào chênh lệch đó là thật

Phép ghi đắt hơn phép so sánh khi phần tử lớn, hoặc khi phải ghi xuống đĩa. Lúc đó n-1 lần đổi chỗ thắng rõ, dù big-O của hai bên viết giống hệt nhau.

Selection sort: được gì, mất gì

Ưu điểm

Đúng n-1 lần đổi chỗ, ít nhất nhóm cơ bản

Sắp xếp tại chỗ, không cần bộ nhớ phụ

Thời gian chạy đoán được, không phụ thuộc dữ liệu

Nhược điểm

Luôn n² so sánh, kể cả mảng đã đúng sẵn

Không có dừng sớm, mảng gần đúng cũng vậy

Bản đổi chỗ không ổn định

Lưu lại để chạy tay sau

Loạt bài thuật toán sắp xếp cho dev Việt Nam.

techtipstechtipsvnthuattoanlaptrinhhoclaptrinh
Đọc tiếp

Bài khác cùng chủ đề

Slide bìa: Hai lỗi Critical cho người lạ chạy code trên server Next.js: lên 16.4.1 hoặc 15.5.2809

Hai lỗi Critical cho người lạ chạy code trên server Next.js: lên 16.4.1 hoặc 15.5.28

Tin2′ đọc16.10
Slide bìa: Caveman: một lệnh để Claude Code trả lời ngắn, và lúc nào thì không đáng cài08

Caveman: một lệnh để Claude Code trả lời ngắn, và lúc nào thì không đáng cài

tutorial1′ đọc16.10
Slide bìa: Code Go không đọc body chậm gần 5 lần qua HTTP/1, Go 1.27 tự sửa10

Code Go không đọc body chậm gần 5 lần qua HTTP/1, Go 1.27 tự sửa

Giải thích2′ đọc15.10
Slide bìa: Node.js vá lỗi bảo mật mức HIGH ngày 21/10: máy bạn đang chạy bản nào?07

Node.js vá lỗi bảo mật mức HIGH ngày 21/10: máy bạn đang chạy bản nào?

Tin1′ đọc15.10

Mỗi ngày một bài mới.

Mẹo, giải thích và tin công nghệ cho sinh viên và dev mới đi làm. Một người viết, đăng đều.

Bài cũng được đăng lên TikTok, ở dạng slide.

TikTok@techtipsvn