1つ、バブルソート
バブルの急増と同様に、データは配列内で小さいものから大きいものへ、または大きいものから小さいものへと前進し続けます。
基本的な考え方:
バブルソートの基本的な考え方は、隣接する2つの要素の値を比較することです。条件が満たされると、要素の値が交換され、小さい方の要素が配列の先頭に移動されます。大きい方の要素は配列の後ろに移動し(つまり、各要素の位置を2つ交換します)、小さい方の要素が泡のように下から上に上昇します。
アルゴリズムのアイデア:
バブリングアルゴリズムは、外側のループを使用して並べ替えのラウンド数を制御する2層ループによって実装されます。通常、配列が1つしかないため、並べ替えられる配列の長さは1に短縮されます。最後のループに要素が残っているため、比較は不要です。並べ替えが完了しました。内側のループは主に、配列内の隣接する各要素のサイズを比較して、位置を交換するかどうかを決定するために使用されます。比較と交換の数は、ソートラウンドの数とともに減少します。
#!/bin/bash
#冒泡排序
arr=(10 44 55 24 33 78 11) #这里是我自己定义得数组arr
length=${#arr[@]}
echo "原数组为:${arr[@]} "
for((i=1;i<${#arr[@]};i++)) #外部循环,控制轮次
do
for ((j=0;j<${#arr[@]}-$i;j++)) #内部循环,控制每轮比较次数
do
if [ ${arr[$j]} -gt ${arr[$j+1]} ] #对每轮从头开始得相邻两个数进行比较,小的上浮(放前面),大的下沉(放后面替换位置)
then
temp=${arr[$j]} #这里把前一个定义给一个变量temp
arr[$j]=${arr[$j+1]} #如果前一个大于后一个,则两两交换位置
arr[$j+1]=$temp
fi
done
done
echo "冒泡排序完得数组为:${arr[@]} "
成功!
2、直接ソート
バブルソートと比較して、直接選択ソートは交換が少ないため、高速です。
基本的な考え方:
指定した並べ替え位置を他の配列要素と個別に比較します。条件が満たされると、要素の値が交換されます。ここではバブルソートが区別されることに注意してください。隣接する要素を交換する代わりに、条件を満たす要素が交換されます。指定された並べ替え位置(最後の要素からの並べ替えなど)を使用して、並べ替え位置が徐々に拡大し、最終的に配列全体が並べ替え形式になります
#!/bin/bash
#直接排序
arr=(10 44 55 24 33 78 11)
echo "原先得数组为:${arr[@]} "
length=${#arr[@]}
for ((i=1;i<$length;i++))
do
index=0 #定义一个index变量,用来接收
for ((j=1;j<=$length-i;j++)) #这里我用的是<=因为我下面用的是 -lt 来判断的,所以这里需要<=
do
if [ ${arr[$index]} -lt ${arr[$j]} ] #这里我用的是小于
then
index=$j
fi
last=$[ $length - $i ]
temp=${arr[$last]}
arr[$last]=${arr[$index]}
arr[$index]=$temp
done
done
echo "直接排序完得数组为:${arr[@]} "
3、逆ソート
元の配列の内容を逆の順序で並べ替えます
基本的な考え方:
配列の最後の要素を最初の要素に置き換えます。最後から2番目の要素は2番目の要素に置き換えられ、以下同様に、すべての配列要素が逆になって置き換えられます。
#!/bin/bash
#直接排序
arr=(10 44 55 24 33 78 11)
echo "原先得数组为:${arr[@]} "
length=${#arr[@]}
for ((i=1;i<$length;i++))
do
index=0
for ((j=1;j<=$length-i;j++))
do
if [ ${arr[$index]} -lt ${arr[$j]} ]
then
index=$j
fi
last=$[ $length - $i ] #从这里开始,以下就是首尾替换。
temp=${arr[$last]}
arr[$last]=${arr[$index]}
arr[$index]=$temp
done
done
echo "直接排序完得数组为:${arr[@]} "