@techtipsvn
Thuật toán

Heap sort: n log n trong mọi trường hợp, không tốn thêm bộ nhớ

Hiểu heap trước, rồi mới tới sắp xếp

2026-08-2107 slide2 phút đọcGiải thích
Slide bìa: Heap sort: n log n trong mọi trường hợp, không tốn thêm bộ nhớSlide 2Slide 3Slide 4Slide 5Slide 6Slide 7
cuộn, vuốt, hoặc phím ←→01 / 07

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à gì

Heap là một cây nhị phân, mỗi nút có nhiều nhất hai con. Điều kiện duy nhất: giá trị ở mỗi nút luôn lớn hơn hoặc bằng hai con của nó. Nhờ vậy số lớn nhất luôn nằm ở đỉnh.

Chỗ hay nhầm

Bằng cũng được, nên dữ liệu trùng giá trị vẫn hợp lệ

Cây này nằm trong một mảng

Không cần con trỏ. Nút ở vị trí i có hai con ở 2i+1 và 2i+2. Cây và mảng là cùng một dữ liệu, chỉ là hai cách nhìn. Đó là lý do heap sort không cần bộ nhớ phụ.

Quy ước

Đếm từ 0

Sắp xếp bằng heap

  1. Dựng heapBiến cả mảng thành heap một lần
  2. Lấy đỉnhĐỉnh là số lớn nhất, đưa về cuối mảng
  3. Sift-downKéo phần tử mới ở đỉnh xuống đúng tầng
  4. Thu hẹpBỏ phần cuối ra, lặp lại với phần còn lại

Vì sao thư viện vẫn giữ heap sort

Introsort bắt đầu bằng quick sort. Khi đệ quy quá sâu, nó đổi sang heap sort. Heap sort đảm bảo n log n trong mọi trường hợp, nên nó là cái chặn cho trường hợp xấu nhất.

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ật, vì nhảy bộ nhớ

Không ổn định

Phải hiểu heap trước, khó đọc hơn hẳn

Bài cuối: counting sort

Thuật toán không so sánh gì cả, và đi vòng qua được giới hạn n log n.

techtipstechtipsvnthuattoanhoclaptrinhlaptrinh
Đọ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