perl 飞碟 *** 作符{ $a <=> $b } 运行机制

perl 飞碟 *** 作符{ $a <=> $b } 运行机制,第1张

首先, 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做一个基本程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9439116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存