用于在1-d阵列中查找峰值的perl程序

时间:2013-09-15 04:26:08

标签: perl

此代码中的错误是什么? 可以在perl代码中为1-d数组中的峰值发现提供代码吗? 我试过,但如果有人帮助我,我可以完成。

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

3 个答案:

答案 0 :(得分:5)

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

use List::Util qw(max);

my $max = max @arr;

答案 1 :(得分:2)

快速执行此操作的方法是使用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,在版本5.8.0

之前,它不会成为Perl核心的一部分

答案 2 :(得分:0)

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

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