int[] A, B, C;
int n = |S|;
if (n < 50) return k-t kleinstes Element per Hand;
else
zerlege S in Gruppen zu je 5 Elementen
;
Bestimme in jeder Gruppe den Median ;
Bestimme den Median der Mediane:
m = select
;
A = x S | x < m;
B = x S | x == m;
C = x S | x > m;
if (|A| >= k) return select (A, k);
if (|A|+|B| >= k) return m;
if (|A|+|B|+|C| >= k) return select(C, k-|A|-|B|);
d.h. mind. der Elemente von ist
höchstens der Elemente von ist
, analog .
Sei die Anzahl der Schritte, die die Methode select benötigt für eine Menge der Kardinalität .
Also:
Beweis durch Induktion:
für
Sei bis bewiesen
Rekursionsgl. | |||||||
Ind.-Annahme | |||||||
q.e.d. |