用于在一维数组中查找峰值的Perl程序



这段代码中的错误是什么?任何人都可以在 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";
}
}`

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

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

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

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

更新

或者您可以使用List::Util中的map - 谢谢@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核心的一部分

Perl有一个内置的sort函数,在这种情况下应该会有所帮助。

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

最新更新