Đừng bao giờ chọn một trục cố định - điều này có thể bị tấn công để khai thác thời gian chạy O (n ^ 2) trong trường hợp xấu nhất của thuật toán của bạn, điều này chỉ gây ra rắc rối. Thời gian chạy trong trường hợp xấu nhất của Quicksort xảy ra khi việc phân vùng dẫn đến một mảng gồm 1 phần tử và một mảng gồm n-1 phần tử. Giả sử bạn chọn phần tử đầu tiên làm phân vùng của mình. Nếu ai đó cung cấp một mảng cho thuật toán của bạn theo thứ tự giảm dần, trục xoay đầu tiên của bạn sẽ là trục lớn nhất, vì vậy mọi thứ khác trong mảng sẽ di chuyển sang bên trái của nó. Sau đó, khi bạn đệ quy, phần tử đầu tiên sẽ lại lớn nhất, vì vậy một lần nữa bạn đặt mọi thứ sang bên trái của nó, v.v.
Một kỹ thuật tốt hơn là phương pháp trung vị của 3, trong đó bạn chọn ngẫu nhiên ba phần tử và chọn phần giữa. Bạn biết rằng phần tử bạn chọn sẽ không phải là phần tử đầu tiên hay cuối cùng, nhưng theo định lý giới hạn trung tâm, sự phân bố của phần tử ở giữa sẽ là bình thường, có nghĩa là bạn sẽ có xu hướng ở giữa (và do đó , n lg n lần).
Nếu bạn hoàn toàn muốn đảm bảo thời gian chạy O (nlgn) cho thuật toán, phương pháp cột của 5 để tìm giá trị trung bình của một mảng sẽ chạy trong thời gian O (n), có nghĩa là phương trình lặp lại cho nhanh chóng trong trường hợp xấu nhất sẽ là T (n) = O (n) (tìm trung vị) + O (n) (phân hoạch) + 2T (n / 2) (đệ quy trái và phải.) Theo Định lý Master, đây là O (n lg n) . Tuy nhiên, hệ số không đổi sẽ rất lớn và nếu hiệu suất trong trường hợp xấu nhất là mối quan tâm chính của bạn, hãy sử dụng sắp xếp hợp nhất thay thế, chỉ chậm hơn một chút so với quicksort trung bình và đảm bảo thời gian O (nlgn) (và sẽ nhanh hơn nhiều hơn quicksort trung bình khập khiễng này).
Giải thích về thuật toán trung vị trung vị