Bằng cách nào đó tôi đã nghĩ về quicksort đêm qua và đang đọc về nó trên Wikipedia. Phần thú vị đối với tôi là: 'Nếu chúng tôi luôn có thể chọn một trục từ 50% giữa, chúng tôi sẽ chỉ phải chia danh sách nhiều nhất. Sự lựa chọn của trục dường như là một vấn đề có thể xảy ra của quicksort có thể dẫn đến hành vi.
Ý tưởng của tôi là: Nếu trong mỗi bước, người ta sẽ sử dụng giá trị trung bình của phân vùng làm trục , điều này có thể tăng tốc độ đáng kể. Đặc biệt là sau một vài bước, khi các ngoại lệ nằm trong phân chia danh sách của riêng họ, giá trị trung bình và trung bình phải rất gần nhau (một lần nữa, nhìn vào danh sách lớn). Thời gian bổ sung trong mỗi bước để tính giá trị trung bình nên là. Vì thế:
Thời gian ước tính Quicksort:
Thời gian ước tính Quicksort_mean:
(5/3 rất có thể là một ước tính bảo thủ của tôi, cũng có thể gần hơn với 2, vì các tập hợp con sẽ nhanh chóng không có ngoại lệ). Vì vậy, bắt đầu từ khoảng 10.000 mục Quicksort_mean sẽ nhanh hơn (trung bình) so với Quicksort. Hơn nữa, nó sẽ không bao giờ có nguy cơ trở thành , vì nó bị ràng buộc là không lấy phần tử tối thiểu hoặc tối đa của ngăn xếp.
Câu hỏi chính của tôi là: Tôi có bỏ lỡ điều gì không? Tôi phải thừa nhận, bản thân tôi chưa bao giờ thực hiện quicksort, vì vậy tôi có thể bỏ lỡ các phần khác của toàn bộ (lưu trữ, v.v.)