Algoritmo de classificação
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
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[*]}"
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
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[*]}"
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[*]}"