Matriz de programação shell e explicação detalhada de classificação de algoritmo de bolha
Quatro expressões de um array
Método 1:
Nome da matriz = (valor0 valor1 valor2 ...)
Método 2:
Nome da matriz = ([0] = valor [1] = valor [2] = valor)
Método 3:
Nome da lista = "valor0 valor1 valor2 ..."
Nome da matriz = ($ list name)
Método 4:
Array name [0] = "valor"
Array name [1] = "valor"
Array name [2] = "value"
……
Adição, exclusão, modificação e operação de verificação de duas matrizes
Obtenha o comprimento da matriz
arr_length = $ {# arr_number [*]}
fatia da matriz
[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ~]# echo ${a[*]} //输出整个数组
1 2 3 4 5
[root@localhost ~]# echo ${a[@]:0:2} #${数组名[@或*]:起始位置:长度]
1 2
[root@localhost ~]# echo ${a[@]:2:3}
3 4 5
注意:将数组切片之后,返回的是字符串,以空格作为分隔符
Substituição de matriz
arr=(1 2 3 4 5)
echo ${arr[@]/4/66} //${数组名[@或*]/查找字符/替换字符}
1 2 3 66 5
echo ${arr[@]} //并不会替换数组原有内容
1 2 3 4 5
a=(${arr[@]/4/66}) //要实现改变原有数组,可通过重新赋值实现
echo ${arr[*]}
1 2 3 66 5
Excluir array
[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr //删除整个数组
[root@localhost ~]# unset arr[2] //删除第三个元素
[root@localhost ~]# echo ${arr[*]}
1 2 4 5
Adicionar elemento à matriz
方法1 array_name[index]=value
方法2 array_name[${#array_name[@]}]=value
方法3 array_name=("${array_name[@]}" value1 ... valueN)
方法4 array_name+=(value1 value 2 ... valueN)
Nota:
As aspas duplas em "$ {array_name [@]}" não podem ser omitidas, caso contrário, quando um
elemento contendo um espaço aparecer na matriz array_name, o elemento será dividido em vários pelo espaço
Você não pode substituir @ por *, caso contrário, todos os elementos na matriz array_name serão adicionados à matriz como um elemento quando você adicionar aspas duplas
Três grupos de parâmetros
3.1 O programa principal passa parâmetros de array para a função
Os seguintes problemas podem ocorrer ao chamar matrizes em funções
#!/bin/bash
test1() {
echo "函数接收到的列表为:$@"
newarray=$1
echo ${newarray[*]}
}
array=(3 2 1 4 5)
echo "原始的数组值为${array[*]}"
test1 $array
O resultado da operação é mostrado na figura abaixo:
Neste momento, você precisa decompor os valores das variáveis da matriz em valores individuais e, em seguida, usar esses valores como parâmetros de função. Dentro da função, todos os parâmetros são recombinados em uma nova variável de array.
O código de demonstração é o seguinte:
#!/bin/bash
test2() {
newarray=($(echo $@)) //$@会把接收到的所有的位置参数都表示出来,并且分割成单个元素。此处也可以写成newarray=($@)
echo "新数组的值为:${newarray[*]}"
}
array=(3 2 1 4 5)
echo "原始的数组值为${array[*]}"
test2 ${array[*]} //此处{
}必加,表示把这个数组看作一个整体
Os resultados são os seguintes
3.2 Retornar matriz da função para o programa principal
test3() {
newarray=(`echo $@`)
for((i=0;i<$#;i++))
{
newarray[$i]=$[${newarray[$i]}*2]
}
echo ${newarray[*]}
}
array=(3 2 1 4 5)
result=($(test3 ${
array[*]}))
echo "新数组的值为:${result[*]}"
Classificação de quatro algoritmos de bolha
A classificação por bolha é
semelhante à ação de bolhas ascendentes, movendo os dados no array de pequenos para grandes ou de grandes para pequenos.
Ideia básica:
a ideia básica da classificação por bolha é comparar os valores de dois elementos adjacentes, trocar os valores dos elementos se as condições forem atendidas e mover o elemento menor para trás da matriz (ou seja, trocar as posições dos dois elementos), de modo que seja menor Os elementos sobem de baixo para cima como bolhas.
Idéia de algoritmo O
algoritmo de bolha é implementado por um loop de camada dupla, onde o loop externo é usado para controlar o número de rodadas de classificação, geralmente o comprimento da matriz classificada é reduzida em um, porque há apenas um elemento da matriz restante no último loop, nenhuma comparação é necessária e a matriz foi concluída Resolvido. O loop interno é usado principalmente para comparar o tamanho de cada elemento adjacente na matriz para determinar se deve trocar as posições.
Código
#!/bin/bash
paixu() {
array=($1)
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[*]}
}
#主体代码
f=$(cat $1)
paixu $f
Os resultados são os seguintes