ここから本文です

Perlのsortの内部処理について 下記のスクリプトを実行した場合、実行結果は、...

wnx********さん

2019/7/1601:51:46

Perlのsortの内部処理について

下記のスクリプトを実行した場合、実行結果は、「2 3 5 11」となると思います。

sortの内部処理について、a==bなら0、a<bなら-1、a>bなら1 の基準に沿って
並び替えを行っているかと思います。
この基準で、なぜ、「5 11 3 2」が「2 3 5 11」になるかがわからないのですが
教えていただけないでしょうか。


<スクリプト>
#!/usr/local/bin/perl

my @nums = (5, 11, 3, 2);
@nums = sort {$a <=> $b} @nums;

print "@nums\n";

閲覧数:
25
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nan********さん

2019/7/1610:19:13

まあ、「もともとソートいうものはそういうもの」だからです。
結局、「大小比較する方法」を与えて sort をするのです。
この場合だと、
$a <=> $b は、内部的には

sub compare{
my ($a, $b) = @_;
if($a == $b) return 0;
elsif($a < $b) return -1;
else return 1;
}

ですね。

一方sort では、
if(compare($a,$b)==1) { $a と $b の交換}
なんて感じで書いてあって、全部の要素で比較と入れ替えをするのです。

これで、めでたく並ぶ順番が小さい順になります。

質問した人からのコメント

2019/7/18 01:59:00

回答いただきありがとうございます。よくわかりました。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo!知恵袋カテゴリ

一覧を見る

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる