Aldri noensinne velge en fast pivot - dette kan bli angrepet for å utnytte din algoritme verste fall O (n ^ 2) runtime, som er bare å be om trøbbel. Quicksort verste fall kjøretidsforekommer ved en oppdeling resulterer i en matrise av en element, og en rekke med n-1 elementer. Tenk deg at du velger det første elementet som partisjon. Hvis noen mater en rekke til din algoritme som er i synkende rekkefølge, vil ditt første dreie være den største, så alt annet i rekken vil flytte til venstre for det. Så når du recurse, vil det første elementet bli størst igjen, så nok en gang du setter alt til venstre for den, og så videre.
En bedre teknikk er median-av-tre-metoden, der du plukker opp tre elementer tilfeldig, og velg midten. Du vet at elementet som du velger ikke vil være den første eller den siste, men også ved å sentralgrensesetningen, vil fordelingen av midtelementet være normal, noe som betyr at du vil tendere mot midten (og dermed , n lg n tid).
Hvis du absolutt ønsker å garantere O (nlgn) runtime for algoritmen, den kolonner-of-5 metode for å finne medianen av en rekke kjører i O (n) tid, noe som betyr at tilbakefall ligningen for quicksort i verste fall vil være T (n) = O (n) (en median) + O (n) (skillevegg) + 2T (n / 2) (recurse venstre og høyre.) Ved Master sats, er denne O (n lg n) . Imidlertid vil konstant faktor være enorme, og hvis worst case ytelse er din primære bekymring, bruke en flettesortering i stedet, som er bare litt tregere enn quicksort i gjennomsnitt, og garanterer O (nlgn) tid (og vil være mye raskere enn dette halt median quicksort).
Forklaring av medianen av Medianer algoritme