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?
- Sort Visualizer → Watch sorting algorithms run, step by step
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.