use List::Util qw(shuffle max); use Sort::Key::Top qw(ntop); my @data = shuffle (0..100); my $mediam = ntop -1, ntop 1 + @data / 2, @data; # O(N) # or # $mediam = max ntop 1 + @data / 2, @data; # O(N) # $mediam = (ntopsort 1 + @data / 2, @data)[-1]; # O(NlogN)! print "mediam: $mediam\n";