Olá a todos, bem-vindos ao Programmers Online Weekly! Nesta edição, nos aprofundaremos em um algoritmo de classificação clássico - o algoritmo de bolha, e anexaremos uma implementação de código específica.
Introdução
O algoritmo de bolha é um algoritmo de classificação simples, mas ineficiente. Seu princípio é muito intuitivo: através da comparação e troca de elementos adjacentes, o maior (ou menor) elemento é gradualmente "borbulhado" até o final do array. Deixe-me explicar na primeira pessoa.
Primeiro, vamos dar uma olhada na implementação do código do algoritmo de bolha:
código
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1): # 外层循环控制比较轮数
for j in range(n - i - 1): # 内层循环控制每轮的比较次数
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j] # 交换元素位置
arr = [4, 2, 7, 1, 3]
bubble_sort(arr)
print("排序结果为:", arr)
princípio
O texto acima é a implementação de código do algoritmo de classificação por bolha. Primeiro, definimos uma função bubble_sort
e passamos um array para ser classificado arr
. Em seguida, usamos um loop de dois níveis para comparar elementos adjacentes e trocá-los se o elemento anterior for maior que o próximo elemento. Através desta operação, cada rodada de comparação pode "borbulhar" o maior elemento até o final do array. Finalmente, você pode obter um array ordenado.
Então, qual é a complexidade de tempo da classificação por bolha? Como precisamos realizar dois níveis de loops, o loop externo é executado n - 1 vezes e o loop interno é executado n - i - 1 vezes, então o número total de comparações é ( n − 1 ) + ( n − 2 ) +... + 1 (n - 1) + (n - 2) + ... + 1( n-1 )+( n-2 )+...+1 , isto é,n × ( n − 1 ) ÷ 2 n \times (n - 1) \div 2n×( n-1 )÷2 . Portanto, a complexidade de tempo da classificação por bolha éO ( n 2 ) O (n ^ 2)Ó ( n2 ). Em aplicações práticas, se a matriz a ser classificada for grande, a classificação por bolha pode parecer mais lenta, mas para conjuntos de dados pequenos, o algoritmo de bolha ainda é uma boa escolha.
Espero que, através da introdução nesta edição, todos tenham uma compreensão mais profunda do algoritmo da bolha. Se você tiver alguma dúvida ou comentário, deixe-o na área de comentários. Até a próxima edição!
anunciar
Anúncio 1
Programmers Online Weekly está solicitando manuscritos.
Link: http://t.csdn.cn/o5LYu
Anúncio 2
"Coluna Python e Unity" começou! ! ! Confira e inscreva-se!
Link: http://t.csdn.cn/nGiXC
Anúncio 3
Espaço publicitário para alugar! Se quiser anunciar, siga-me e envie-me uma mensagem privada!