Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一维数组中求峰值的perl程序_Perl - Fatal编程技术网

在一维数组中求峰值的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

这段代码中的错误是什么? 在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";
}
}`
@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;