Nooit kiezen voor een vast scharnier - dit kan worden aangevallen om uw algoritme slechtste geval O (n ^ 2) runtime, die net is vragen om problemen te benutten. Quicksort slechtste geval runtime optreedt wanneer partitioneren resulteert in een reeks van 1-element, en een reeks van n-1 elementen. Stel dat u kiest voor de eerste element als uw partitie. Als iemand een array om uw algoritme dat in afnemende volgorde feeds, zal uw eerste scharnier de grootste te worden, dus alles anders in de array zal verplaatsen naar de linkerkant van het. Dan wanneer u recurse, zal het eerste element de grootste weer, dus eens te meer je alles te maken aan de linkerkant van het, en ga zo maar door.
Een betere techniek is de mediaan-of-3 methode, waar u drie elementen halen willekeurig, en kies het midden. U weet dat het element dat u kiest zal niet de eerste of de laatste, maar ook door de centrale limietstelling, de verdeling van de middelste element zal normaal zijn, wat betekent dat je de neiging zal hebben naar het midden (en dus , n lg n tijd).
Als u absoluut wilt O (NLGN) runtime garanderen het algoritme, de kolommen-van-5 methode voor het vinden van de mediaan van een reeks loopt in O (n) tijd, waardoor herhaling vergelijking voor quicksort in het ergste geval zal worden T (n) = O (n) (Zoek de mediaan) + O (n) (partitie) + 2T (n / 2) (recurse links en rechts.) Aan Meester stelling, is O (n lg n) . Toch zal de constante factor enorm zijn, en als ergste geval de prestaties van uw primaire zorg, gebruik dan een merge soort plaats, dat is slechts een klein beetje langzamer dan quicksort gemiddeld, en staat garant voor O (NLGN) tijd (en zal veel sneller dan dit lame mediaan quicksort).
Toelichting op de mediaan van Meden Algorithm