Recursive | No recursive k:global |
Select( l, r ,k )
if r > l then { i := partition( l, r ); if i > l+k-1 then Select( l, i-1, k ); if i < l+k-1 then Select( i+1, r, k-i ); } |
Select(k) l := 1; r := N;
while r > l do { i := partition( l, r ); if i >= k then r := i-1; if i <= k then l := i+1; } |
|
||||||
l↑ |
|
|
r↑
|
Example:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
||||||||||
|
T = N2 worst
N+klog(N/k) average