5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bashでスターリンソートをやってみた

Last updated at Posted at 2019-08-01

スターリンソートなるものが偉大なる先人によって巷で流行りまくっているので、このビッグウェーブに乗るしかないということで、bashでやってみました。
しかしながら、文系すぎて$O(n)$とか意味わからんちんなので、アルゴリズム的に粛清されないかは保証できません。

コード

one_liner.sh
b=(${1});for a in ${@:2};do [ ${a} -ge ${b[-1]} ]&&b+=(${a});done;echo ${b[@]}
functionized.sh
stalin_sort () {
    b=(${1})
    for a in ${@:2}
    do
        if [ ${a} -ge ${b[-1]} ]; then
            b+=($a)
        fi
    done
    echo "${@} => ${b[@]}"
}

list1=(1 2 3 4 5 6 7 8 9)
stalin_sort ${list1[@]}

list2=(9 8 7 6 5 4 3 2 1)
stalin_sort ${list2[@]}

list3=(1 2 4 3 6 8 0 9 5 7)
stalin_sort ${list3[@]}

list4=(1 1 2 8 3 6 8 52 9 5 7)
stalin_sort ${list4[@]}
funcの実行結果
1 2 3 4 5 6 7 8 9 => 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 => 9
1 2 4 3 6 8 0 9 5 7 => 1 2 4 6 8 9
1 1 2 8 3 6 8 52 9 5 7 => 1 1 2 8 8 52

粛清感...低すぎ!?

解説

b=(${1}) 与えられた引数の最初の数字をぶち込んだArrayを生成
for a in ${@:2} Arrayの2番目の要素から最後までをループ
${b[-1]} 生存リストArray(b)の最後の要素と比較(-1記法はbash4.3から)
b+=($a) 生存リストArrayの最後に粛清を免れた数字を投獄

終わりに

言いたかったことは、bash4.3からArrayの最後の要素簡単に取れますってことです。
ちなみに、これMacで検証したんですが、次のMacOSからログインシェルはzshなんですよね...。
諸行無常。

現場からは以上です。

5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?