use strict; use warnings; use List::Util 'shuffle'; use Time::HiRes 'time'; # Return index to biggest element. sub reisinge { [ sort { $_[$b] <=> $_[$a] } 0 .. $#_ ]->[0]; } sub GrandFather { my $idxMax = 0; $_[$idxMax] > $_[$_] or $idxMax = $_ for 1 .. $#_; $idxMax; } sub biggest_elm { my ($idxMax,$idx) = (0,0); ($_[$idxMax] > $_ or $idxMax = $idx), $idx++ for @_; $idxMax; } srand 0; my @list = shuffle 1..4e5; for my $code (qw( reisinge GrandFather biggest_elm )) { no strict 'refs'; my ($start, $idx) = (time, $code->(@list)); printf "Index %d, Seconds (%-11s): %0.03f\n", $idx, $code, time - $start; }