There is an algorithm for finding minimum and maximum simultaneously (in one pass over an array), requiring $O(1)$ additional memory.
The idea is to process the elements of the input array in pairs as in this answer by templatetypedef, but without explicit grouping, so (almost) no additional memory is needed.
A coarse sketch of the algorithm:
Compare the first pair of elements between each other.
Compare the smaller element with the current minimum and update the current minimum if needed.
Compare the larger element with the current maximum and update the current maximum if needed.
Repeat for the rest pairs.
The analysis of the number of comparisons is the same as given by @templatetypedef.
This algorithm is described in detail in "Introduction to Algorithms", 3ed by Cormen, Leiserson, Rivest, and Stein (sect. 9.1, p. 214).
The book also states (in the form of an exercise) that the lower bound for any simultaneous min/max algorithm is $\lceil 3n/2 \rceil - 2$ comparisons in the worst case, so we actually can't do much better than we already do.