Chuyển tới nội dung chính
Z

Sorting Algorithms

Bubble, insertion, merge, quick & heap sort — compared and visualized

Sorting is the classic lens for learning algorithm analysis: every method produces the same ordered output, but the cost of getting there ranges from O(n²) to O(n log n). Watching them side by side makes the trade-offs concrete.

The simple O(n²) sorts

Bubble sort repeatedly swaps adjacent out-of-order pairs; selection sort repeatedly picks the smallest remaining element; insertion sort grows a sorted prefix one element at a time. All three are quadratic in the worst case, but insertion sort shines on small or nearly-sorted inputs, where it approaches O(n).

The divide-and-conquer sorts

Merge sort splits the array in half, sorts each half and merges them, guaranteeing O(n log n) at the cost of extra memory. Quicksort partitions around a pivot and recurses; it is usually the fastest in practice thanks to cache locality, but a poor pivot can degrade it to O(n²). Heap sort builds a binary heap and repeatedly extracts the max, sorting in place in O(n log n) with no extra memory.

Stability & in-place

Two properties decide which sort fits a job: stability (equal keys keep their original order — merge and insertion sort are stable; quick and heap sort are not) and whether the sort works in place (no significant extra memory — quick and heap sort do; merge sort does not). Step through each below to feel the difference.

Try it interactively

Trình mô phỏng Bubble Sort

Mô phỏng bubble sort có hoạt ảnh với các nút điều khiển từng bước, tốc độ, dữ liệu đầu vào tùy chỉnh, bộ đếm so sánh/hoán đổi trực tiếp và pseudocode. Chạy hoàn toàn trong trình duyệt của bạn.

Mở công cụ

Trình trực quan hóa Insertion Sort

Insertion Sort hoạt hình với các nút điều khiển từng bước, tốc độ, dữ liệu đầu vào tùy chỉnh, bộ đếm so sánh/ghi trực tiếp và mã giả (pseudocode). Chạy hoàn toàn trên trình duyệt của bạn.

Mở công cụ

Trình trực quan hóa Selection Sort

Selection Sort hoạt hình với các nút điều khiển từng bước, tốc độ, dữ liệu đầu vào tùy chỉnh, bộ đếm so sánh/hoán đổi trực tiếp và mã giả (pseudocode). Chạy hoàn toàn trên trình duyệt của bạn.

Mở công cụ

Trình trực quan hóa Merge Sort

Mô phỏng merge sort có hoạt ảnh với điều khiển từng bước, tốc độ, dữ liệu đầu vào tùy chỉnh, bộ đếm so sánh/ghi trực tiếp và mã giả (pseudocode). Chạy hoàn toàn trên trình duyệt.

Mở công cụ

Trình trực quan hóa Quick Sort

Quicksort hoạt hình với làm nổi bật pivot/phân vùng, điều khiển từng bước, tốc độ, nhập tùy chỉnh, bộ đếm trực tiếp và mã giả. Chạy ngay trong trình duyệt của bạn.

Mở công cụ

Trình minh họa Heap Sort

Minh họa động thuật toán heap sort với điều khiển từng bước, tốc độ, dữ liệu đầu vào tùy chỉnh, bộ đếm so sánh/hoán đổi trực tiếp và pseudocode. Chạy ngay trên trình duyệt.

Mở công cụ

Prefer a focused tool?

Câu hỏi thường gặp

Heap sort là gì?

Heap sort xây dựng một max-heap từ mảng, sau đó lặp lại việc hoán đổi phần tử gốc (lớn nhất) xuống cuối và thực hiện sift-down để khôi phục tính chất heap, dần dần mở rộng vùng đã sắp xếp từ phía bên phải.

Độ phức tạp thời gian của heap sort là gì?

O(n log n) trong cả trường hợp tốt nhất, trung bình và xấu nhất. Việc xây dựng heap mất O(n) và mỗi lần trong n lần trích phần tử tốn O(log n).

Heap sort có ổn định (stable) không?

Không. Các thao tác trên heap hoán đổi các phần tử ở xa nhau, điều này có thể làm thay đổi thứ tự tương đối của các giá trị bằng nhau.

Heap sort so với quicksort thì thế nào?

Heap sort đảm bảo độ phức tạp O(n log n) ở trường hợp xấu nhất và chỉ dùng O(1) bộ nhớ phụ, nhưng quicksort thường nhanh hơn trong thực tế nhờ tính cục bộ bộ nhớ đệm (cache locality) tốt hơn và hằng số nhỏ hơn.