Méthode d'opération de tableau et vous apprendre le tri de tableau (algorithme de bullage, algorithme de tri direct, tri inversé)

Méthode d'opération de tableau et vous apprendre le tri de tableau (algorithme de bullage, algorithme de tri direct, tri inversé)

Premièrement, la méthode de définition du tableau

première méthode:

数组名=(value0 value1 value2 ...)

Insérez la description de l'image ici

Deuxième méthode:

`组名=([0]=value [1]=value [2]=value ...)`

Insérez la description de l'image ici

Troisième méthode:

列表名="value0 value1 value2 ..."
数组名=($列表名)

Insérez la description de l'image ici

Méthode quatre:

数组名[0]="value"
数组名[1]="value"
数组名[2]="value"

Insérez la description de l'image ici

Deux, le type de données du tableau

Type numérique Type de
caractère (chaîne): Utilisez "" ou "" pour définir pour éviter les espaces dans les éléments, et les éléments sont séparés par des espaces

Troisièmement, obtenez la longueur du tableau

[root@localhost ~]#abc=(1 2 3 4 5 6)
[root@localhost ~]#length_abc={#abc[*]}
[root@localhost ~]#echo $length
7

Insérez la description de l'image ici

1. Lire un devoir en indice

[root@localhost ~]#abc=(1 2 3 4 5

[root@localhost ~]#echo ${abc[3]}
4

Insérez la description de l'image ici

2. Traversée du tableau

#!/bin/bash
abc=(1 2 3 4 5)
for v in ${abc[@]}
do
echo $v
done

Insérez la description de l'image ici

3. Tranche de tableau

abc=(1 2 3 4 5)
echo ${abc[@]}			#输出整个数组

echo ${abc[@]:0:2}		#获取 ${数组名[@或*]:起始位置:长度} 的值

echo ${abc[*]:1:3}

echo ${abc[@]:2:3}

Insérez la description de l'image ici

4. Remplacement de la baie

arr=(1 2 3 4 5)

echo ${arr[@]/4/66} 	#${数组名[@或*]/查找字符/替换字符}
echo ${arr[@]}			#并不会替换数组原有内容

arr=(${arr[@]/4/66})	#要实现改变原有数组,可通过重新赋值实现
echo ${arr[@]}

Insérez la description de l'image ici

5. Suppression de tableau

arr=(1 2 3 4 5)
unset arr				#删除数组
echo ${arr[*]}

arr=(1 2 3 4 5)
unset arr[2]			#删除第三个元素
echo ${arr[*]}

Insérez la description de l'image ici

6, ajoutez des éléments au tableau

première méthode:

abc[index]=value

Insérez la description de l'image ici

Deuxième méthode:

abc[${#abc[@]}]=value

Insérez la description de l'image ici

Troisième méthode:

array_name=("${array_name[@]}" value1 ... valueN)
双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个
不能将“@”替换为“*”,如果替换为“*”,不加双引号时与“@”的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中

for i in "${array_name[@]}"; do echo $i; done

Insérez la description de l'image ici

Méthode quatre:

abc+=(value1 ... valueN)
待添加元素必须用“()”包围起来,并且多个元素用空格分隔

Insérez la description de l'image ici

Quatrièmement, passez les paramètres du tableau à la fonction

1. Si une variable de tableau est utilisée comme paramètre de fonction, la fonction ne prendra que la première valeur de la variable de tableau.

tel que:

vim 11.sh

#!/bin/bash

test1() {
    
    
  echo "接收到的参数列表:$@"
  newarrary=($1)
  echo "新数组的值为:${newarrary[*]}"
}

array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]}"
test1 $array
[root@localhost ~]#vim 11.sh
[root@localhost ~]#. 11.sh 
原始数组的值为:3 2 1 4 5
接收到的参数列表:3
新数组的值为:3

2. Pour résoudre ce problème, vous devez décomposer les valeurs des variables de tableau en valeurs individuelles, puis utiliser ces valeurs comme paramètres de fonction. À l'intérieur de la fonction, regroupez tous les paramètres dans une nouvelle variable de tableau

vim 12.sh

#!/bin/bash

test2() {
    
    
  newarrary=($(echo $@))
  echo "新数组的值为:${newarrary[*]}"

}

array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]}"
test2 ${array[*]}
[root@localhost ~]#vim 12.sh
[root@localhost ~]#. 12.sh 
原始数组的值为:3 2 1 4 5
新数组的值为:3 2 1 4 5
[root@localhost ~]#

3. Renvoie un tableau à partir d'une fonction

vim 13.sh

#!/bin/bash

test2() {
    
    
  newarrary=(`echo $@`)

  sum=0
  for value in ${newarrary[*]}
  do
    sum=$[$sum + $value]
  done
  echo $sum
}

array=(3 2 1 4 5)
echo "原始数组的值为:${array[*]}"
result1=`test2 ${
     
     array[*]}`
echo "新数组的和为:$result1"
[root@localhost ~]#vim 13.sh
[root@localhost ~]#. 13.sh 
原始数组的值为:3 2 1 4 5
新数组的和为:15
[root@localhost ~]#

Cinq, algorithme de tri de tableau

1. Méthode de tri des bulles

Semblable à la recrudescence des bulles, les données continueront à avancer dans le tableau de petite à grande ou de grande à petite.

Idée de base:
L'idée de base du tri des bulles est de comparer les valeurs de deux éléments adjacents, d'échanger les valeurs des éléments si les conditions sont remplies, de déplacer le plus petit élément vers l'avant du tableau et de déplacer le plus grand élément vers l'arrière du tableau (c'est-à-dire d'échanger deux La position de chaque élément), de sorte que le plus petit élément monte de bas en haut comme une bulle.

Idée d'algorithme L'
algorithme de bullage est implémenté par une double boucle, où la boucle externe est utilisée pour contrôler le nombre de tours de tri. Généralement, la longueur du tableau à trier est réduite de 1, car il ne reste qu'un seul élément de tableau dans la dernière boucle, et il n'y a pas besoin de comparaison. Le tri est terminé. La boucle interne est principalement utilisée pour comparer la taille de chaque élément adjacent dans le tableau pour déterminer s'il faut échanger des positions.Le nombre de comparaisons et d'échanges diminue avec le nombre de tours de tri.

Insérez la description de l'image ici

vim 14.sh

#!/bin/bash
abc=(13 4 8 3 9 15 66)
length=${#abc[*]}

 for ((i=1;i<$length;i++))
 do
    for ((j=0;j<$length-$i;j++))
     do
    first=${abc[$j]}
    k=$[$j+1]
    second=${abc[$k]}
    if [ $first -gt $second  ]
     then
       temp=$first
       abc[$j]=$second
       abc[$k]=$temp
    fi
     done

Insérez la description de l'image ici

[root@localhost ~]#vim 14.sh
[root@localhost ~]#. 14.sh 
3 4 8 9 13 15 66

2. Sélectionnez directement le tri

Comparé au tri à bulles, le tri par sélection directe a moins d'échanges, donc la vitesse sera plus rapide.

Idée de base:
comparez la position de tri spécifiée avec d'autres éléments du tableau. Si la condition est remplie, la valeur de l'élément sera échangée. Notez que le tri à bulles est distingué ici. Au lieu d'échanger des éléments adjacents, l'élément qui remplit la condition est échangé avec la position de tri spécifiée (telle que Trier à partir du dernier élément), de sorte que la position triée se développe progressivement, et finalement le tableau entier devient le format trié.

Insérez la description de l'image ici

vim 15.sh
#!/bin/bash
abc=(13 4 8 3 9 15 66)
length=${#abc[*]}

 for ((i=1;i<$length;i++))
 do
    index=0
    for ((j=1;j<=$length-i;j++))
     do
      if [ ${abc[$j]} -gt ${abc[$index]} ]
       then
        index=$j
       fi
     done
         last=$[$length-$i]
         temp=${abc[$last]}
         abc[$last]=${abc[$index]}
         abc[$index]=$temp

done
    echo "${abc[*]}"

Insérez la description de l'image ici

[root@localhost ~]#vim 15.sh
[root@localhost ~]#. 15.sh 
3 4 8 9 13 15 66

3. Inversez le tri

Réorganisez le contenu de la matrice d'origine dans l'ordre inverse.

L'idée de base:
remplacer le dernier élément du tableau par le premier élément, remplacer l'avant-dernier élément par le deuxième élément, et ainsi de suite, jusqu'à ce que tous les éléments du tableau soient inversés et remplacés.

vim 16.sh

#!/bin/bash
abc=(1 2 3 4 5 6 7)
length=${#abc[*]}
for ((i=0;i<$length/2;i++))
  do
    temp=${abc[$i]}
    abc[$i]=${abc[$length-$i-1]}
    abc[$length-$i-1]=$temp
  done
 echo "${abc[*]}"

Insérez la description de l'image ici

[root@localhost ~]#vim 16.sh
[root@localhost ~]#. 16.sh 
7 6 5 4 3 2 1

Je suppose que tu aimes

Origine blog.csdn.net/weixin_51573771/article/details/111641266
conseillé
Classement