-5

这段代码有什么错误?可以在 perl 代码中给出一维数组中峰值查找的代码吗?我试过了,但如果有人帮助我,我可以完成。`

@a=(5.7,5.3,8.2,16.5,34.2,58.8,5.9,8,5,27.8);
@a=\$ptr;
$i;
$f=1;
$l=10;
$num=@a;
print"\nthe num of elements in array:$num";
$s=0;
$s=$s+$_ for @a;
print"\nthe sum of all elements in array:$s";
$mean=$s/$num;
print"\n the mean is :$mean";
$mid=($f+$l)/2;
print"\nthe mid point:$mid";
print"\nthe middle element :$a[5]";
unless($a[$i]==$a[5])
{if($a[$i]>$a[5])
for ($i=$a[5];$a[$i]<$a[5];$i--);
{
$ptr=$a[$i-1];
$ptr->$max;
print"$max";
}
}`
4

3 回答 3

5

找到最大值的最简单方法是使用核心List::Util模块。

use List::Util qw(max);

my $max = max @arr;
于 2013-09-15T05:22:07.627 回答
2

一个快速的方法是使用sort. 但请务必使用数字比较器,因为 sort 默认情况下对字母数字进行排序:

my @b = sort {$b <=> $a} @a;
print "$b[0]";

更新

或者您可以使用map来自List::Util- 谢谢@squiguy。

use List::Util qw(max);
my $peak = max(@a);

确实sort应该比算法慢,max因为max算法是 O(n),排序是 O(n * log(n))。如果@a 足够小,那么没关系。

但是,max它还有另一个好处,那就是它更能说明您正在尝试做什么,因此更具可读性。map来自List::Util它直到版本才成为 Perl 核心的一部分5.8.0

于 2013-09-15T04:36:49.463 回答
0

Perl 有一个内置sort函数可以在这种情况下提供帮助。

a@ = sort {$b <=> $a} @a;
print "$a[0]";
于 2013-09-15T04:28:19.770 回答