Complexidade de algoritmos insertion, selection e bubble sort.
1. Centro Universitário do Sul de Minas – UNIS-MG
Unidade de Gestão da Educação Superior Presencial – GEP
Ciência da Computação
Complexidade de Algoritmos Insertion, Selection e Bubble Sort
Análise de Algoritmos
Professor Renan Levenhagen Bustamante Neves
Júlio Cezar Ferreira Rocha
Varginha
2013
2. 1 - Complexidade de Algoritmos Bubble Sort
As operações de comparações e de troca de posição de elementos são executadas no Pior
Caso, o algoritmo realizará n-1 troca para o primeiro passo, depois n-2 trocas para o segundo
elemento e assim sucessivamente. Trocas = n-1+n-2+n-3...+2+1 aproximadamente n2 trocas.
No Melhor Caso, nenhuma troca será realizada, pois em ambos os casos o algoritmo faz da
ordem n comparações.
Complexidade no tempo: Comportamento do algoritmo no tempo, em função do tamanho
da entrada.
Complexidade no espaço: Consumo de memória do algoritmo, em função do tamanho da
entrada.
O tempo gasto na execução do algoritmo varia em ordem quadrática em relação ao
número de elementos a serem ordenados.
- T = O (n²) – Notação “Big O”
- Atividades mais custosas:
• Comparações
• Troca de Posição (swap)
Melhor caso: Vetor Ordenado.
Pior caso: Vetor invertido.
2 - Complexidade de Algoritmos Selection Sort
A operação entre as chaves é feita no loop k, para cada valor de i são realizadas (i-1)
comparações no loop, como i varia de 2 até n, o número total de comparações para ordenar a
lista toda é que para qualquer valor de i existe no máximo uma troca, se no caso a lista já
estiver ordenada não ocorre troca. Pior caso existe uma troca para cada loop de k (n-1) para
cada troca exige três movimentos. O algoritmo de seleção é considerado um dos mais simples,
além disso, possui uma característica eficiente quanto à quantidade de movimentações de
registros, com um tempo de execução linear no tamanho de entrada. Geralmente é utilizado
para arquivos de registros maiores com até 1000 registros.
- T = O(n²)
O fato de o conjunto já estar ordenado não ajuda em nada. O algoritmo não é estável, isto
é, os registros com chaves iguais nem sempre irão manter a mesma posição relativa de antes
do início da ordenação.
3 – Complexidade de Algoritmos Insertion Sort
Se o valor a ordenar possui n elementos, então o algoritmo realizará n – 1 etapas.
Quantas comparações e trocas serão realizadas?
• No melhor caso, vetor ordenado, serão realizadas 1 comparação e 1 troca por
etapa, um total de (n-1) comparações e (n-1) trocas.
• No pior caso, vetor em ordem inversa, serão realizadas sucessivamente 1,2,3,... n1 comparações e trocas.
3. A soma dos termos dessa progressão aritmética será n²/2.
Pode ser demonstrado que para um vetor aleatório, o número aproximado de
comparações e trocas é n²/4.
Portanto, a complexidade deste algoritmo é quadrática.
- T = O(n²).
No anel mais interno, na i-ésima iteração, o valor de Ci é: Melhor caso: Ci(número de
comparações) = 1 Pior caso: Ci(número de comparações) = i Caso médio: Ci(número de
comparações) = 1/i(1 + 2 + ... + i) = (i+1)/2 Se todas as permutações de n são igualmente
prováveis para o caso médio, então, o número de comparações é igual a: Melhor caso: C(n) =
(1 + 1 + ... + 1) = n - 1 Pior caso: C(n) = (2 + 3 + ... + n) = n2/2 + n/2 - 1 Caso médio: C(n) =
1/2(3 + 4 + ... + n+1) = n2/4 + 3n/4 – 1 O número de movimentações na i-ésima iteração é
igual a Mi(n) = Ci(n) – 1 + 3 = Ci(n) + 2 logo, o número de movimentos é igual a: Melhor
caso: M(número de elementos do arquivo) = (3 + 3 + ... + 3) = 3(n – 1) Pior caso: M(número
de elementos do arquivo) = (4 + 5 + ... + n+2) = n2/2 + 5n/2 – 3 Caso médio: M(número de
elementos do arquivo) = 1/2(5 + 6 + ... + n+3) = n2/4 + 11n/4 – 3 Deste modo podemos
concluir que: Melhor caso: O(n) Pior caso: O(n2) Caso médio: O(n2) O menor número de
comparações e trocas ocorre exatamente quando os elementos estão originalmente em ordem,
e o número máximo de comparações e trocas ocorre quando os itens estão originalmente na
ordem oposta. Para arquivos já ordenados o algoritmo descobre a um custo O(n) que cada
item já está em seu lugar. Então, este é o método a ser utilizado quando o arquivo está
ordenado na sua origem. É também um método bom para adicionar um pequeno conjunto de
dados a um arquivo já ordenado, originando um outro arquivo ordenado, pois neste caso o
custo pode ser considerado linear.
4 - Bibliografia
Alves, Ms. Daniel Arndt. Estrutura de Dados II. Insertion Sort. São Paulo. 2009.
Alves, Ms. Daniel Arndt. Estrutura de Dados II. Selection Sort. São Paulo. 2009.
Alves, Ms. Daniel Arndt. Estrutura de Dados II. Bubble Sort. São Paulo. 2009.
Junior, Vilson Heck. Introdução a Complexidade de Algoritmos. São Paulo. 2008.
Prestes, Edson. Complexidade de Algoritmos. Rio de Janeiro. 2007.
Silva, Cândida Nunes. Complexidade de Algoritmos I. Rio de Janeiro. 2011.