@techtipsvn
Thuật toán

Quick sort nhanh nhất thực tế, nhưng có một trường hợp làm nó về n²

Nhanh nhất thực tế, và hỏng khi chọn sai

2026-08-2107 slide2 phút đọcGiải thích
Slide bìa: Quick sort nhanh nhất thực tế, nhưng có một trường hợp làm nó về n²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.

Một lượt phân hoạch

  1. ChọnLấy một phần tử làm mốc, gọi là pivot
  2. Đẩy tráiSố nhỏ hơn pivot dồn sang bên trái
  3. Đẩy phảiSố lớn hơn pivot dồn sang bên phải
  4. LặpLàm lại đúng như vậy với từng phía

Pivot quyết định nhanh hay chậm

Pivot chia mảng thành hai phía. Chia càng cân thì càng ít tầng đệ quy, và thuật toán càng nhanh. Chia lệch thì một phía gần như không nhỏ đi, nên số tầng tăng vọt.

Hai đầu

Chia cân thì n log n, chia lệch mọi lần thì n²

Trường hợp làm quick sort sập

Mảng đã sắp xếp sẵn, cộng với cách chọn pivot là phần tử đầu tiên. Mỗi lần chia đều lệch hết cỡ, và quick sort rơi xuống n². Đó là lý do không thư viện nào chọn kiểu đó.

Thư viện không dùng quick sort thuần

C++, Go và Rust dùng introsort hoặc pdqsort. Chúng bắt đầu như quick sort, nhưng khi đệ quy quá sâu thì đổi sang heap sort. Nhờ vậy trường hợp xấu nhất không còn là n².

Lưu ý

Sắp xếp ổn định thì Python và Java đi nhánh merge sort

Quick sort được gì, mất gì

Ưu điểm

Mảng ngẫu nhiên thì nhanh nhất trên thực tế

Sắp xếp tại chỗ, đệ quy chỉ tốn log n

Là mặc định cho sắp xếp không ổn định

Nhược điểm

Trường hợp xấu nhất vẫn là n²

Không ổn định, hai số bằng nhau có thể đảo

Cài ẩu thì đệ quy sâu, tràn ngăn xếp

Bài sau: heap sort

Chính là cái lưới mà introsort rơi vào khi quick sort đệ quy quá sâu.

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