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)

Insira a descrição da imagem aqui

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
Insira a descrição da imagem aqui

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:
Insira a descrição da imagem aqui
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
Insira a descrição da imagem aqui

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
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/cenjeal/article/details/108128512
Recomendado
Clasificación