Find
PROBLEM
The selection problem can be stated as follows: given an array A. of N elements and an integer K, 1<=K<=N, determine the Kth smallest element of A. and rearrange the array in such a way that this element is placed in A.K and all elements with subscripts lower than K have values not
larger than A.K and all elements with subscripts greater than K have values not smaller than this.
ALGORITHM
The FIND algorithm was proposed by C. A. R. Hoare. It was the first fast average-time algorithm. Its worst-case running time is O(N**2) on an input array of N elements and its expected running time is O(N).
PRACTICE
Algorithms
MODIFIND and
SELECT are almost always faster than
FIND.
SELECT needs fewer comparisons than
MODIFIND;
MODIFIND needs fewer swaps than
SELECT. The average time over
10 trials required by
FIND,
MODIFIND, and
SELECT to determine the median of
10000 elements (strings) of length
L<=6 (only numbers),
L<=7,
L<=500 was found experimentally
Selection problem - Comparisons of Algorithms |
Algorithm |
L <= 6 |
L <= 7 |
L <= 500 |
FIND |
0.957 |
1.475 |
4.104 |
MODIFIND |
0.929 |
1.212 |
1.476 |
SELECT |
0.602 |
0.828 |
0.985 |
IMPLEMENTATION
Unit: nonrecursive internal function
Global variables: the array A. of arbitrary elements
Parameters: a positive integer N - number of elements in A., a positive integer K such that 1<=K<=N
Result: Reordering of input array such that A.K has the value it would have if A. were sorted, L<=I<=K will imply A.I<=A.K, and K<=I<=R will imply A.I>=A.K
Returns: A.K
FIND: procedure expose A.
parse arg N, K
L = 1; R = N
do while L < R
X = A.K; I = L; J = R
do until I > J
do while A.I < X; I = I + 1; end
do while X < A.J; J = J - 1; end
if I <= J
then do
W = A.I; A.I = A.J; A.J = W
I = I + 1; J =J - 1
end
end
if J < K then L = I
if K < I then R = J
end
return A.K
|
CONNECTIONS
Literature
Hoare C. A. R. Proof of a Program: FIND
CACM, Vol 14, No. 1, January 1971, pp. 39-45
Wirth N. Algorithms and data strucure
New Jersey, Prentice Hall, Inc., Engelwood Cliffs, 1986
Zabrodsky V. Variace na klasicke tema
Elektronika (former Czech computer journal), No. 6, 1992, pp. 33-34