The other solutions are nice, but if you want a more efficient algorithm then it is indeed possible to avoid the sort. An O(N) algorithm is:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my %hash = (
Matt => 24, Dana => 19, Eric => 28, Sara => 20, John => 17, Mi
+ke => 23,
);
if (%hash)
{
my (@min, @max);
while( my ($k,$v) = each %hash )
{
@min = ($k,$v) unless @min && ($v > $min[1]);
@max = ($k,$v) unless @max && ($v < $max[1]);
}
$hash{$min[0]} = $max[1];
$hash{$max[0]} = $min[1];
}
print Dumper \%hash;
--Dave