Algoritmo de classificação (classificação por bolha, classificação direta, classificação reversa)

Um, tipo bolha

Semelhante ao surgimento de bolhas, os dados continuarão a avançar na matriz de pequeno para grande ou de grande para pequeno
Insira a descrição da imagem aqui

1.1 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, mover o elemento menor para a frente da matriz e mover o elemento maior para trás da matriz (ou seja, a troca de dois elementos Posicione) de modo que o elemento menor suba da parte inferior para a parte superior como uma bolha.

1.2 Ideias 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 a ser classificada menos 1 vez, porque há apenas um elemento da matriz restante no último loop, nenhuma comparação é necessária e a matriz foi classificada Acima. O loop interno é usado principalmente para comparar o tamanho de cada elemento adjacente na matriz para determinar se deve-se trocar as posições. O número de comparações e trocas diminui com o número de rodadas de classificação.

1.3 Exemplo

arr=(54 3 1233 -4 135 31 1)
echo "原数组为:${arr[*]}"
length=${#arr[*]}
for  ((a=1;a<$length;a++))
 do
  for  ((b=0;b<$length-a;b++))
   do  
    if [ ${arr[$b]} -gt ${arr[$[$b+1]]} ]
    then
      temp=${arr[$b]}
      arr[$b]=${arr[$[$b+1]]}
      arr[$[$b+1]]=$temp
    fi  
   done
 done
echo "新数组为:${arr[*]}"

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Em segundo lugar, selecione e classifique diretamente

Em comparação com a classificação por bolha, a classificação por seleção direta tem menos trocas, por isso é mais rápida
Insira a descrição da imagem aqui

2.1 Ideia básica

Compare a posição de classificação especificada com outros elementos da matriz. Se a condição for atendida, o valor do elemento será trocado. Observe que a diferença é a classificação por bolha. Em vez de trocar elementos adjacentes, o elemento que atende à condição é trocado pela posição de classificação especificada (como a partir do último Os elementos começam a ser classificados), de modo que a posição classificada se expanda gradualmente e, finalmente, todo o array se torna o formato classificado.

2.2 Exemplo

arr=(25 31 2 45 123 312 4)
echo "原数组为:${arr[*]}"
length=${#arr[*]}
for ((a=1;a<$length;a++))
 do
  index=0
   for  ((b=1;b<=$length-a;b++))
    do  
     if [ ${arr[$b]} -gt ${arr[$index]} ];then
        index=$b
     fi  
    done
    temp=${arr[$length-$a]}
    arr[$length-$a]=${arr[$index]}
    arr[$index]=$temp
done
echo "新数组为:${arr[*]}"

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Três, classificação reversa

Reordene o conteúdo da matriz original na ordem inversa

3.1 Ideia básica

Substitua o último elemento da matriz pelo primeiro elemento. O penúltimo elemento é substituído pelo segundo elemento, e assim por diante, até que todos os elementos da matriz sejam revertidos e substituídos

3.2 Exemplo

arr=(10 20 30 40 50 60) 
echo "原数组为:${arr[*]}"

length=${#arr[*]}
 for ((a=0; a<$length/2; a++))
  do  
   temp=${arr[$a]}
   arr[$a]=${arr[$lenqth-$a-1]}
   arr[$length-$a-1]=$temp
  done
echo "新数组为:${arr[*]}"

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_51613313/article/details/111646718
Recomendado
Clasificación