Cả hai nguồn của bạn đều đề cập đến "thời gian chạy dự kiến trong trường hợp xấu nhất" của Tôi đoán điều này đề cập đến yêu cầu thời gian dự kiến, khác với trường hợp xấu nhất tuyệt đối.O(nlogn).
Quicksort thường có yêu cầu thời gian trong trường hợp xấu nhất tuyệt đối là . Trường hợp xấu nhất xảy ra khi, ở mỗi bước, thủ tục phân vùng chia một mảng thứ n thành các mảng có kích thước 1 và n - 1 . Sự lựa chọn các yếu tố trục "không may mắn" này đòi hỏi các cuộc gọi đệ quy O ( n ) , dẫn đến trường hợp xấu nhất O ( n 2 ) .O(n2)n1n−1O(n)O(n2)
Việc chọn trục ngẫu nhiên hoặc xáo trộn ngẫu nhiên mảng trước khi sắp xếp có tác dụng khiến trường hợp xấu nhất rất khó xảy ra, đặc biệt đối với các mảng lớn. Xem Wikipedia để biết bằng chứng rằng yêu cầu về thời gian dự kiến là . Theo một nguồn khác , "xác suất quicksort sẽ sử dụng số lượng so sánh bậc hai khi sắp xếp một mảng lớn trên máy tính của bạn ít hơn nhiều so với xác suất máy tính của bạn bị sét đánh".O(nlogn)
Biên tập:
Theo nhận xét của Bangye, bạn có thể loại bỏ chuỗi lựa chọn trục trong trường hợp xấu nhất bằng cách luôn chọn phần tử trung vị làm trục. Kể từ khi việc tìm kiếm trung bình phải mất thời gian, điều này sẽ cho Θ ( n log n ) thực hiện trường hợp xấu nhất. Tuy nhiên, vì quicksort ngẫu nhiên rất khó có thể vấp ngã trong trường hợp xấu nhất, nên biến thể tìm kiếm trung bình xác định của quicksort hiếm khi được sử dụng.O(n)Θ(nlogn)