SpringCloud(六) 微服務架構-APM監控
阿新 • • 發佈:2021-01-03
陣列使用和排序
陣列新增元素
array_name[index]=value
array_name[${#array_name[@]}]=value
array_name=("${array_name[@]}" value1 … valueN)
雙引號不能省略,否則,當陣列array_name中存在包含空格的元素時會按空格將元素拆分成多個
不能將“@”替換為“”,如果替換為“”,不加雙引號時與“@”的表現一致,加雙引號時,會將陣列array_name中的所有元素作為一個元素新增到陣列中
array_name+=(value1 … valueN)
待新增元素必須用“()”包圍起來,並且多個元素用空格分隔
向函式傳陣列引數
如果將陣列變數作為函式引數,函式只會取陣列變數的第一個值。
echo "接收到的引數列表:[email protected]"
newarrary=$1
echo "新陣列的值為:${newarrary[*]}"
}
array=(3 2 1 4 5)
echo "原始陣列的值為:${array[*]}"
test1 $array
解決這個問題則需要將陣列變數的值分解成單個的值,然後將這些值作為函式引數使用。在函式內部,再將所有的引數重新組合成一個新的陣列變數。
newarrary=($(echo [email protected]))
echo "新陣列的值為:${newarrary[*]}"
}
array=(3 2 1 4 5)
echo "原始陣列的值為:${array[*]}"
test2 ${array[*]}
從函式返回陣列
test2() {
newarrary=(`echo [email protected]`)
sum=0
for value in ${newarrary[*]}
do
sum=$[$sum + $value]
done
echo $sum
}
test3() {
newarrary=(`echo [email protected]`)
for ((i=0; i<=$[$# - 1]; i++))
{
newarrary[$i]=$[${newarrary[$i]} * 2]
}
echo ${newarrary[*]}
}
array=(3 2 1 4 5)
echo "原始陣列的值為:${array[*]}"
result1=`test2 ${array[*]}`
echo "新陣列的和為:$result1"
result2=(`test3 ${array[*]}`)
echo "新陣列的值為:${result2[*]}"
氣泡排序
類似氣泡上湧的動作,會將資料在陣列中從小到大或者從大到小不斷的向前移動。
基本思想:
氣泡排序的基本思想是對比相鄰的兩個元素值,如果滿足條件就交換元素值,把較小的元素移動到陣列前面,把大的元素移動到陣列後面(也就是交換兩個元素的位置),這樣較小的元素就像氣泡一樣從底部上升到頂部。
演算法思路
冒泡演算法由雙層迴圈實現,其中外部迴圈用於控制排序輪數,一般為要排序的陣列長度減1次,因為最後一次迴圈只剩下一個數組元素,不需要對比,同時陣列已經完成排序了。而內部迴圈主要用於對比陣列中每個相鄰元素的大小,以確定是否交換位置,對比和交換次數隨排序輪數而減少。
#!/bin/bash
array=(3 2 5 1 4)
for ((i=1; i<${#array[*]}; i++)) ###比較輪數為陣列長度減1,從1開始
do
for ((j=0; j<${#array[*]}-i; j++)) ###比較相鄰兩個元素,較大的數往後放,比較次數隨比較輪數而減少
do
if [ ${array[$j]} -gt ${array[$[$j+1]]} ];then ###如果第一個元素比第二個元素大就互換
temp=${array[$j]} ###把第一個元素值儲存到臨時變數中
array[$j]=${array[$[$j+1]]} ###把第二個元素值儲存到第一個元素中
array[$[$j+1]]=$temp ###把臨時變數(也就是第一個元素原值)儲存到第二個元素中
fi
done
done
echo ${array[*]}