use List::Util qw(shuffle); use POSIX qw(ceil); use Heap::Simple::XS; my @list = shuffle(0..1e6); my $h = Heap::Simple::XS->new(max_count => ceil(@list/2), dirty => 1); $h->insert(@list); print $h->extract_top;