On 2/20/06, John W. Krahn <[EMAIL PROTECTED]> wrote:
snip
> my ( $smallestNum, $largestNum ) = ( sort { $a <=> $b } @numbers )[ 0, -1 ];
>
> Although as I said, the for loop is more efficient.
snip

Ah this old chestnut.  Depending on the size of the array sort is
faster (after 200 or so items for starts to be better).  See the
benchmark program at the end of the post for how these numbers were
generated.

Results for list of 10 items
         Rate  for sort
for  146391/s   -- -57%
sort 338736/s 131%   --

Results for list of 20 items
         Rate  for sort
for  101629/s   -- -51%
sort 205937/s 103%   --

Results for list of 40 items
        Rate  for sort
for  57833/s   -- -39%
sort 95050/s  64%   --

Results for list of 80 items
        Rate  for sort
for  32950/s   -- -22%
sort 42259/s  28%   --

Results for list of 160 items
        Rate  for sort
for  17379/s   --  -7%
sort 18656/s   7%   --

Results for list of 320 items
       Rate sort  for
sort 8281/s   --  -7%
for  8905/s   8%   --

#!/usr/bin/perl

use strict;
use Benchmark qw(cmpthese);

sub min_for {
        my $min = shift;
        for (@_) {
                $min = $_ if $_ < $min;
        }
        return $min;
}

sub min_sort { (sort { $a <=> $b } @_)[0] }

for my $size (10, 20, 40, 80, 160, 320) {
        my @rand;
        push @rand, rand(1000) for 1 .. $size;
        print "Results for list of $size items\n";
        cmpthese(
                -3,
                {
                'for'  => sub { min_for(@rand) },
                'sort' => sub { min_sort(@rand) }
                },
        );
        print "\n";
}

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to