Tôi nghĩ rằng vấn đề ở đây là phân tích của bạn về quicksort và heapsort không đủ chính xác để cho thấy lý do tại sao các yếu tố không đổi sẽ khác nhau.
Bạn thực sự có thể cho thấy rằng trung bình, quicksort sẽ làm được nhiều hơn so sánh hơn sắp xếp vun đống (khoảng 1,44 n log n cho quicksort so n log n so với sắp xếp vun đống). Tuy nhiên, so sánh không phải là yếu tố quyết định duy nhất trong thời gian chạy của heapsort và quicksort.
Lý do chính nhanh hơn nhanh hơn là locality of reference. Do cách bộ nhớ lưu trữ hoạt động, việc truy cập mảng ở các vị trí liền kề với nhau có xu hướng nhanh hơn nhiều, nhanh hơn nhiều so với các truy cập mảng nằm rải rác trong một mảng. Trong quicksort, bước phân vùng thường thực hiện tất cả các lần đọc và ghi của nó ở cuối các mảng, do đó các truy cập mảng được đóng gói chặt chẽ với nhau. Heapsort, mặt khác, nhảy xung quanh mảng khi nó di chuyển lên và xuống đống. Vì vậy, mảng truy cập trong quicksort, trung bình, mất ít thời gian hơn nhiều so với mảng truy cập trong heapsort. Sự khác biệt là đủ lớn để hệ số không đổi ở phía trước của n log n trong quicksort thấp hơn hệ số không đổi trước chữ n log n trong heapsort, đó là một lý do tại sao quicksort nhanh hơn nhiều so với heapsort.
Tóm lại - nếu tất cả những gì chúng tôi quan tâm là so sánh, heapsort là lựa chọn tốt hơn so với quicksort. Nhưng kể từ khi hệ thống bộ nhớ sử dụng cache và bộ nhớ cache bỏ lỡ là tốn kém, quicksort thường là một lựa chọn tốt hơn nhiều.
Ngoài ra, lưu ý rằng log (n n) = n log n và log (n!) = N log n - n + O (log n) thông qua Stirling's approximation. Điều này có nghĩa là nhật ký (n!) Không nhỏ hơn nhiều so với n log n, ngay cả khi n rất lớn. Có chắc chắn là một sự khác biệt, nhưng nó không đủ lớn để làm cho một vết lõm lớn trên riêng của mình.
Hy vọng điều này sẽ hữu ích!
"Chi phí" có thể có nghĩa là nhiều điều. Bạn đang nói về số lượng so sánh trường hợp xấu nhất? – delnan
Tại sao lại là thẻ toán học? – arshajii
Xem [* Giới thiệu về thuật toán *] (http://poincare.matf.bg.ac.rs/~jelenagr//AIDA/Introduction_to_algorithms_3rd_edition.pdf) vì sao heapsort là O (n log n). –