在一维数组中求峰值的perl程序
这段代码中的错误是什么? 在perl代码中,是否可以给出一维数组中峰值查找的代码? 我试过了,但如果有人帮我,我可以完成`在一维数组中求峰值的perl程序,perl,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 arra
@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";
}
}`
@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;
打印“\n数组中的元素数:$num”;
$s=0;
$s=$s+$u表示@a;
打印“\n数组中所有元素的总和:$s”;
$mean=$s/$num;
打印“\n平均值为:$mean”;
$mid=($f+l)/2;
打印“\n中点:$mid”;
打印“\n中间元素:$a[5]”;
除非($a[$i]==$a[5])
{if($a[$i]>$a[5])
对于($i=$a[5];$a[$i]$max;
打印“$max”;
}
}`
Perl有一个内置的sort
函数,在这种情况下应该会有所帮助
a@ = sort {$b <=> $a} @a;
print "$a[0]";
a@=sort{$b$a}@a;
打印“$a[0]”;
一种快速的方法是使用排序
。但一定要使用数字比较器,因为排序默认对字母数字排序:
my @b = sort {$b <=> $a} @a;
print "$b[0]";
确实,
sort
应该比max
慢,因为max
算法是O(n),sort是O(n*log(n))。如果@a足够小,那就没关系了
但是,
max
还有另一个好处,那就是它更能指示您正在尝试做什么,因此更具可读性。map
来自List::Util
,它直到版本5.8.0
才成为Perl核心的一部分。找到max的最干净的方法是使用核心模块
您对空格键过敏吗?(第一)个错误是:
@a=\$ptr
——您覆盖了所有要检查的值。sort
的速度太慢了。max
是正确的方法。sort
应该比max
慢,因为max
算法是O(n),sort是O(n*log(n))。如果@a足够小,那么它就不重要了。但是,max
还有另一个好处,它更能指示您正在尝试做什么,因此更具可读性。map
来自List::Util
,直到版本5.8.0
,它才成为Perl核心的一部分。我将更新答案以包括这一点。排序使用默认排序(cmp
)的数字不是一个好主意。通过字符串比较,2
高于10
。哇。-更正。
use List::Util qw(max);
my $peak = max(@a);
use List::Util qw(max);
my $max = max @arr;