Your skill will accomplishwhat the force of many cannot PerlMonks

### Re^2: How can I find the index of the biggest element in an array?

by marioroy (Prior)
 on Mar 15, 2017 at 08:55 UTC Need Help??

GrandFather's solution may be shorten if a short one-liner is what you're after.

```# reisinge
perl -E 'say [ sort { \$ARGV[\$b] <=> \$ARGV[\$a] } 0..\$#ARGV ]->[0]' 42 1
+000 999 0 -1

# GrandFather
perl -E '\$m=0; \$ARGV[\$m] > \$ARGV[\$_] or \$m=\$_ for 1..\$#ARGV; say \$m' 4
+2 1000 999 0 -1

# Shorten, similar performance
perl -E '\$i=0; (\$ARGV[\$m] > \$_ or \$m=\$i), \$i++ for @ARGV; say \$m' 42 1
+000 999 0 -1

Below, please find a benchmark script for testing against a large list.

```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;
}

Regards, Mario.

Replies are listed 'Best First'.
Re^3: How can I find the index of the biggest element in an array?
by reisinge (Hermit) on Mar 15, 2017 at 11:22 UTC

Thanks Mario! Yeah, my solution doesn't scale well at all:

```# Your benchmark script
Index 234638, Seconds (reisinge   ): 1.919
Index 234638, Seconds (GrandFather): 0.073
Index 234638, Seconds (biggest_elm): 0.072

# Your benchmark script =~ s/1\.\.4e5/1..4e6/;
Index 3167631, Seconds (reisinge   ): 33.464
Index 3167631, Seconds (GrandFather): 0.876
Index 3167631, Seconds (biggest_elm): 0.775
As a system administrator, automating the work that needs to be done should be the majority of your job. --PSNA2

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1184663]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (6)
As of 2024-08-11 22:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When will the AI bubble burst?

Results (22 votes). Check out past polls.

Notices?
 • erzuuli ‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.