#!/usr/bin/perl -w
# 把命令列上的所有參數排序. 用選擇排序法 (selection sort).
# http://www.cyut.edu.tw/~ckhung/b/pl/

use strict;
my (@data, $n, $i, $j, $min, $tmp, $item);

@data = @ARGV;			# 拷貝整個陣列
$n = $#data + 1;		# 總共有幾個元素要排序?

for ($i = 0; $i < $n; ++$i) {	# 迴圈每做一次, 就把第 $i 小的元素選出來
    $min = $i;			# 先前已排好的不算, 目前所知的最小元素是第 $min 個
    for ($j = $i + 1; $j < $n; ++$j) {	# 後面的元素當中, 那個最小呢?
	$min = $j if (($data[$j] cmp $data[$min]) < 0)
				# 注意: 如果不加括弧的話, 會先算 < 再算 cmp
				# 如果要按照數字的順序排, 就把 cmp 換成 <=>
    }
    if ($min != $i) {
				# 那麼就要把最小的元素給調過來了
	$tmp = $data[$i];
	$data[$i] = $data[$min];
	$data[$min] = $tmp;
    }
}

foreach $item (@data) {
    print " $item";		# 注意: 在雙引號內, perl 還是認得純量變數,
				# 會把它的值代換進去.
}

print "\n";

# 以下僅供參考
# 這個程式其實可以寫成兩句話:
# @data = sort @ARGV;
# print " @data\n";


