Yes it can:
min-max(a[], n)
if a[1] < a[2]
min = a[1]
max = a[2]
else
min = a[2]
max = a[1]
for i = 3 to n
if min > a[i]
min = a[i]
else if max < a[i]
max = a[i]
return min, max
This version requires 2*(n - 2) + 1 = 2n - 3 comparisons. To make the question more precise: can the reduction in comparisons be made a factor of the size of the input array?
This page last modified on 24 January 2006.