首先, by_number 并没有读取过 @paixu,
而是 sort 赋值给了 $a 和 $b, 再调用 by_number 去解释 $a 和 $b
所以, 如果你在 by_number 入面 print "@_", 你是会得到空值的
也所以, 你写的 by_number 要跟著 sort 所给你的规范, 只能回传 -1 0 和 1
perl sort 的(内部)次序类似是这样的, 先将第一列,
尽量以两个两个一组来排(单数则先留下最後一个),
第一轮之後, sort 会记得最大和最小的值,
然後, 再以最大那个数开始, 对比最小那个数, 直至最後一个数
如果当中有比最大数有更大的数字出现 ( 例如之前说元素量为单数时被遗漏了的最後一个) ,
则会重新较正(重新记得一个最大数), 再依前面所说的次序做排列
而其中的回圈数, 是 O(n log n) 至 O(n2)次
顺带一提, sort 其实是数学的方法, 所以当中有很多 "门派", 如:
bubble sort, Cocktail sort, insertion sort, bucket sort, counting sort, merge sort
我们最初入门时学的 bubble sort :
for $i ( 1 10 ) {
for $j ( 110 ) {
}
}
是最没效率的 而 Perl 用的, 就叫 "quick sort"
这是对一个内存有行星名称星座亮度等内容的文件进行编辑的程序。
第一段是用来查询一些名称对应亮度的。第二段是统计同一星座星数的,可以比较容易改成调用子程序的。第三段是对文件编辑后存入文件。不知道合不合要求
#!/usr/bin/perl -w
use strict;
open F, "star25txt" or die "Can't open file";
my @lines = <F>;
close F;
chomp @lines;
s/#// foreach @lines;
my (%sname, %spectrum, @fields);
foreach (grep !/^$/, @lines) {
@fields = split /:/, $_;
next if @fields < 6;
$sname{$fields[0]} = $fields[1];
$spectrum{$fields[0]} = $fields[5];
}
print exists $sname{$_}
"$_: Scientific name is $sname{$_}, Spectrum is $spectrum{$_}\n" :
"$_: Not find!\n"
foreach ('Pole star', 'Castor', 'Altair', 'Hadar');
###################
my $c;
foreach $c ('Ori', 'Cen', 'Cru') {
print "Number of starts in $c is ",
scalar(grep {$_ eq $c} map ((split / /, $_)[1], values %sname)),
"\n";
}
###################
my %Nspec;
$Nspec{substr $_, 0, 1}++ foreach values %spectrum;
open F, ">OBAFGKMtxt" or die "Can't open file for write";
print F "$_:$Nspec{$_}\n" foreach keys %Nspec;
close F;
1;
以上就是关于perl 飞碟 *** 作符{ $a <=> $b } 运行机制全部的内容,包括:perl 飞碟 *** 作符{ $a <=> $b } 运行机制、用PERL做一个基本程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)