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

Heap sort chậm hơn quick sort nhưng thư viện vẫn giữ nó, và đây là lý do

Vì sao introsort giữ nó làm phương án dự phòng cho quick sort.

2026-08-1908 slide2 phút đọcGiải thích
Slide bìa: Heap sort chậm hơn quick sort nhưng thư viện vẫn giữ nó, và đây là lý doSlide 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.

Heap là cây, không phải mảng

Heap là cây nhị phân mà mỗi nút luôn lớn hơn hoặc bằng hai con của nó. Hệ quả: phần tử lớn nhất luôn nằm ở đỉnh, và bạn lấy được nó ngay không cần tìm.

Ví dụ

Đỉnh 9, hai con 7 và 5, bốn cháu 3 4 2 1 — cha luôn lớn hơn con

Cây đó nằm sẵn trong mảng

  1. Mảng9 7 5 3 4 2 1 — bảy ô liên tiếp, không con trỏ nào
  2. ĐỉnhVị trí 0 là số 9, chính là gốc của cây
  3. Công thứcCon của vị trí i nằm ở 2i+1 và 2i+2
  4. Kiểm lạiCon của vị trí 0 là vị trí 1 và 2, tức 7 và 5

Lấy dần đỉnh xuống cuối mảng

Đổi chỗ đỉnh với phần tử cuối, coi như phần tử đó đã xong, rồi kéo phần tử mới lên đỉnh xuống đúng tầng của nó. Lặp n lần, mỗi lần tốn log n bước.

Vì sao introsort giữ heap sort

Nó là thuật toán duy nhất vừa đảm bảo n log n trong mọi trường hợp, vừa không cần bộ nhớ phụ. Khi quick sort đệ quy quá sâu, introsort đổi sang nó để chặn n².

Học heap dùng được nhiều hơn

Hàng đợi ưu tiên gần như luôn cài bằng heap, và bạn gặp nó nhiều hơn hẳn việc tự viết hàm sắp xếp: lập lịch job, tìm đường, gộp nhiều luồng log theo thời gian.

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

Ưu điểm

n log n cả ở trường hợp xấu nhất

Sắp xếp tại chỗ, bộ nhớ phụ O(1)

Không đệ quy nên không lo tràn ngăn xếp

Nhược điểm

Chậm hơn quick sort thực tế vì cache miss

Không ổn định

Phải hiểu heap trước khi hiểu sắp xếp

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