シェルスクリプト(Bash)で配列の値をバブルソートして昇順に並び替える方法





全体のコード

array=(11 83 8 2 100 22 67 71 24 11)
length=${#array[@]}

for vaule in ${array[@]}; do
    tmp=0
    for ((i = 1; i < length; i++)); do
        if [ ${array[$((i - 1))]} -gt ${array[$i]} ]; then
            tmp=${array[$((i - 1))]}
            array[$((i - 1))]=${array[i]}
            array[i]=$tmp
        fi
    done
done
echo ${array[@]}




解説

forとfor inの二重ループです。

配列の要素のi-1番目とi番目を比較し、i-1番目のほうが大きかった場合値を交換します。
交換する際に一時的に値を保存しておくための変数tmpを用意します。

if [ ${array[$((i - 1))]} -gt ${array[$i]} ]; then
	tmp=${array[$((i - 1))]}
	array[$((i - 1))]=${array[i]}
	array[i]=$tmp
fi




for文の1回目のループの時、i-1番目の要素は存在しません。
ですのでfor文のiの初期値は0ではなく1にする必要があります。




これで以上です。