On 30 Aug 2002, Felix Geerinckx wrote: > There is no need to sort the full array (as others suggested) to just > find the lowest and highest number when an O(n) operation will > suffice:
Precisely the comment that I had a few months back for a similar question. Read through this thread http://archive.develooper.com/beginners%40perl.org/msg22716.html > > my ($min, $max); > $min = $max = $array[0]; > for (1..@array-1) { > $min = $array[$_] if $array[$_] < $min; > $max = $array[$_] if $array[$_] > $max; > } > print "min = $min, max = $max\n"; For further proof here is a benchmarking result #!/usr/local/bin/perl -w use strict; use Benchmark; my @arr = qw(34 12 23 45 11 91 32); sub using_sort { my $min = (sort {$a <=> $b} @arr)[0]; my $max = (reverse sort {$a <=> $b} @arr)[0]; } sub using_for { my ($min, $max); $min = $max = $arr[0]; for (1..@arr-1) { $min = $arr[$_] if $arr[$_] < $min; $max = $arr[$_] if $arr[$_] > $max; } } timethese (1000000, { using_sort => \&using_sort, using_for => \&using_for }); =cut Benchmark: timing 1000000 iterations of using_for, using_sort... using_for: 11 wallclock secs (11.60 usr + 0.04 sys = 11.64 CPU) @ 85910.65/s (n=1000000) using_sort: 8 wallclock secs ( 7.63 usr + 0.06 sys = 7.69 CPU) @ 130039.01/s (n=1000000) Note that even with two sorts and a reverse the using_sort subroutine is faster in terms of speed. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]