経緯
実は先日、Linuxの講習会を頼まれました.
一体何を教えればいいのかを考えた結果、講習会に参加する多くの生徒がすでに学習しているソートのうち、最もシンプルなバブルソートをシェルで組んでみようと思ったのがきっかけです.
バブルソートの概要
配列の端から順に隣の配列と自身の値を比較し,大きい方を隣に移動させていく.すると片方の端に最も大きな数字が出てきます.
すると次に探索範囲を一つ狭めて引き続き同様の処理を行う.すると最終的に大きいものが順に配列に配置されるため,泡(大きな数字)が移動することからバブルソートという名前のソートになったそうです.
作成したコード
以下に作成したコードを示します.
#!/bin/sh
# バブルソートをシェルでやってみた
arr=(5 54 2 6 7 121 75) # ソートする対象の配列
len=${#arr[@]} # 配列の大きさ
for i in `seq 0 $(( ${len} - 1 ))` # 第一ループ
do
for j in `seq $(( ${len} - 1 )) 0` # 第二ループ
do
if [ $j -le $i ]; then
break # i > jを満たさなくなったら次のループへ
fi
if [ ${arr[$j]} -lt ${arr[( $j - 1 )]} ]; then
temp=${arr[$j]} # swap
arr[$j]=${arr[$(( $j - 1 ))]} # swap
arr[$(( $j - 1 ))]=$temp # swap
fi
done
done
echo ${arr[@]} # ソート終了時に結果出力
まとめ
今回はシェルスクリプトの勉強の一環としてソートアルゴリズムを実際のシェル処理に落とし込むという試みをした。
時間があればもっと別の処理を組んでみたい.(クイックソートとか)