Đây là một câu trả lời của một câu hỏi trên cs.SE của Janoma . Tín dụng đầy đủ và chiến lợi phẩm cho anh ta hoặc cs.SE.
Trong một khóa học thuật toán tiêu chuẩn, chúng tôi được dạy rằng quicksort trung bình là O (n log n) và O (n²) trong trường hợp xấu nhất. Đồng thời, các thuật toán sắp xếp khác được nghiên cứu là O (n log n) trong trường hợp xấu nhất (như mergesort và heapsort ), và thậm chí cả thời gian tuyến tính trong trường hợp tốt nhất (như bubbleort ) nhưng có thêm một số nhu cầu về bộ nhớ.
Sau khi lướt qua một số lần chạy nhiều hơn, việc nói rằng quicksort không nên hiệu quả như những lần khác.
Ngoài ra, hãy xem xét rằng các sinh viên học trong các khóa học lập trình cơ bản nói chung là không thực sự tốt vì nó có thể sử dụng quá nhiều bộ nhớ, v.v. Do đó (và mặc dù đây không phải là một đối số thực sự), điều này đưa ra ý tưởng rằng quicksort có thể không thực sự tốt vì nó là một thuật toán đệ quy.
Tại sao, sau đó, quicksort vượt trội hơn các thuật toán sắp xếp khác trong thực tế? Nó có liên quan đến cấu trúc dữ liệu trong thế giới thực không? Nó có liên quan đến cách thức hoạt động của bộ nhớ trong máy tính không? Tôi biết rằng một số ký ức nhanh hơn các ký ức khác, nhưng tôi không biết liệu đó có phải là lý do thực sự cho hiệu suất phản trực giác này (khi so sánh với các ước tính lý thuyết).