シェル配列とソートアルゴリズム
1つは、配列です
1.配列定義方法
(30 20 10 60 50 40)
0 1 2 3 4 5
①方法1
数组名=(value0 value1 value2 ...)
②方法2
数组名=([0]=value [1]=value [2]=value ...)
③方法3
列表名="value0 value1 value2 ..."
数组名=($列表名)
④方法4
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
2.配列に含まれるデータ型
- 数值类型
- 字符类型
使用" "或' '定义
3.配列の長さとデータリストを取得します
①配列の長さを取得する
②データリストを取得する
③インデックスの割り当てを読む
4.アレイトラバーサル
#!/bin/bash
arr1=(100 200 300 400 500)
for i in "${arr1[@]}"
do
echo $i
done
for i in "${arr1[*]}"
do
echo $i
done
5.アレイスライシング
6.アレイの交換
7.配列の削除
8.配列に要素を追加します
①
array=(1 2 3 4 5 6)
array[6]=7
array[7]=20
②
array[${#array[@]}]=7
③
array=("${array[@]}" 1 2 3 4)
④
array+=(10 20 30...)
9.配列パラメーターを関数に渡します
#!/bin/bash
test1() {
echo "接收到的数据为:$@"
newarr=($@)
echo "新数组的数据:${newarr[*]}"
}
arr=(1 2 3 4 5 6)
echo "arr数组的数据: ${arr[*]}"
test1 ${arr[@]}
第二に、ソートアルゴリズム
1.バブリングアルゴリズム
バブルの急増と同様に、データは配列内で小さいものから大きいものへ、または大きいものから小さいものへと前進し続けます。
- 基本的な考え方:バブルソートの基本的な考え方は、2つの隣接する要素の値を比較し、条件が満たされた場合に要素の値を交換し、小さい方の要素を配列の前に移動し、大きい方の要素を移動することです要素を配列の後ろに配置して(つまり、2つの要素の位置を交換して)、小さい要素がバブルのように下から上に上がるようにします。
- アルゴリズムのアイデア:バブリングアルゴリズムは、2層ループによって実装されます。このループでは、配列要素が1つしかないため、外側のループを使用して、並べ替えの回数、通常は並べ替える配列の長さから1回を引いた数を制御します。最後のループに残っているので、比較は不要で、配列は同時にソートが完了しています。内側のループは主に、配列内の隣接する各要素のサイズを比較して、位置を交換するかどうかを決定するために使用されます。比較と交換の数は、ソートラウンドの数とともに減少します。
#!/bin/bash
num=(1 2 3 4 5 6 7 8 9 10)
for ((a=1; a<${#num[*]}; a++))
do
for ((a=0; a<${#num[*]}-i; a++))
do
if [ ${num[$a]} -lt ${num[$a+1]} ]
then
temp=${num[$a]}
num[$a]=${num[$a+1]}
num[$a+1]=$temp
fi
done
echo "第${i}次排序后为:${num[*]}"
done
echo "排序后的数组顺序为:${num[*]}"
2.直接除去法
バブルソートと比較して、直接選択ソートは交換が少ないため、高速です
- 基本的な考え方:指定した並べ替え位置を他の配列要素と比較します。条件が満たされると、要素の値が交換されます。ここではバブルソートが区別されることに注意してください。隣接する要素を交換する代わりに、条件を満たす要素が交換されます。指定された並べ替え位置(最後の要素からの並べ替えなど)。これにより、並べ替え位置が徐々に拡大し、最終的に配列全体が並べ替え形式になります。
#!/bin/bash
arr=(20 30 10 60 40 50)
echo "原数组的值为:${arr[@]}"
length=${#arr[@]}
#定义排序轮数
for ((a=1;a<$length;a++))
do
#假设索引为0的元素是最大的
index=0
#定义和第一个元素比较的索引,来确定最大的元素索引
for ((b=1;b<=$length-$a;b++))
do
#定义最大的元素的值
max=${arr[$index]}
#定义从索引1开始比较的元素的值
element=${arr[$b]}
#判断如果从索引1开始比较的元素的值大于当前最大元素的值,就记录最大值的索>引到index
if [ $element -gt $max ];then
index=$b
fi
done
#定义每一轮比较的最后一个元素的索引
last=$[$length-$a]
#把当前轮次的最后一个元素的值赋给临时变量temp
temp=${arr[$last]}
#把最大的值赋给当前轮次的最后一个元素
arr[$last]=${arr[$index]}
#把temp里的原来最后一个元素的值赋给原最大值所在索引的元素
arr[$index]=$temp
done
echo "排序后的数组为:${arr[@]}"
3.並べ替えを逆にします
元の配列の内容を逆の順序で並べ替えます
- 基本的な考え方:
配列の最後の要素を最初の要素に置き換えます。最後から2番目の要素は2番目の要素に置き換えられ、以下同様に、すべての配列要素が逆になって置き換えられます。
#!/bin/bash
arr=(1 2 3 4 5 6 7)
length=${#arr[@]}
for ((i=0;i<$length/2;i++))
do
temp=${arr[$i]}
arr[$i]=${arr[$length-$i-1]}
arr[$length-$i-1]=$temp
done
echo ${arr[@]}