matze77,
Here are some reasons why sorting the array to find the maximum value is not a good idea:
- You either change the order of the array, or waste memory making a copy
- You spend extra cycles sorting when finding the max is more efficient O(N)
The implementation you have come up with is usually referred to as the high water mark algorithm. Usually, it looks more like this:
my $max;
for (@list) {
$max = $_ if ! defined $max || $_ > $max;
}
If you know for that no value will be less than a certain number, you can set it to that (as you did with 0) or you can assign it to the first value in the list (as suggested elsewhere in this thread) and then loop through the rest of the list. Many would recommend not re-inventing the wheel and would point you to List::Util.
use List::Util 'max';
print max(@list), "\n";
I wrote
How A Function Becomes Higher Order which may be too advanced but keep the link around for when you are ready. Here are some extra credit ideas to make you consider how you might need to modify the water mark algorithm:
- Consider you want to know the index of the largest element and not the value
- Consider you want to the largest value and how many elements in the list are that value
- Consider if instead of numbers you had strings
- Consider if what you wanted to know was the element with the most characters
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.