Concursos Públicos

Método de Ordenação Bolha para o Concurso do BB (TI)

Olá pessoal, tudo bem? Se você está se preparando para o cargo de Agente de Tecnologia do concurso do Banco do Brasil e está com dificuldade de entender os algoritmos de ordenação, veja esta série de três artigos que estou preparando com o intuito de facilitar o seu aprendizado. Neste artigo, apresentamos o método de ordenação bolha, também chamado de bubble sort.

Primeiramente, é importante entender o que é a ordenação de elementos, que consiste basicamente em colocá-los em ordem crescente ou decrescente. Alguns exemplos de ordenação são: ordenar alunos pelas suas notas; ordenar uma lista telefônica pelo nome das pessoas; ordenar pessoas por idade; ordenar clientes de acordo com a renda; entre outras. 

Além disso, é importante saber que a ordenação de elementos é realizada através de algoritmos de ordenação, e existem vários deles, mas iremos focar em três, que constam no edital do concurso do Banco do Brasil , os quais são: o método de ordenação bolha, a ordenação por seleção e a ordenação por inserção.

Neste artigo, abordaremos o método de ordenação bolha, contemplando os seguintes tópicos:

  • Entendendo o método de ordenação bolha: etapas
  • Pseudocódigo
  • Exemplo (passo a passo)
  • Análise de complexidade do método de ordenação bolha
  • Resumo
  • Vamos praticar!

Entendendo o método de ordenação bolha: etapas

Em primeiro lugar, bolha é um algoritmo de ordenação simples e bastante conhecido, que recebe este nome porque a cada iteração o maior elemento da sequência flutua para o topo, lembrando uma bolha. Ele consiste basicamente em percorrer uma lista comparando os elementos adjacentes (dois a dois) e trocando de posição os que estão fora de ordem.

Além disso, existem variações do método bolha: em alguns casos o método consiste em “flutuar” o maior valor para a última posição a cada iteração, já em outros casos, o menor valor vai para a primeira posição a cada interação.

Assim, como é um método de implementação simples, poucos são os passos necessários para sua implementação. Por exemplo, considerando uma lista de N elementos, as etapas do método bolha são as seguintes:

  1. Percorrer a lista comparando os elementos adjacentes (dois a dois);
  2. Trocar de posição os elementos que estiverem fora de ordem;
  3. Repetir os dois primeiros passos N-1 vezes, sendo que a cada iteração a lista a ser percorrida diminui em uma posição, não sendo necessário comparar os elementos já ordenados.

Agora, vejamos algumas importantes observações:

  • Para uma lista de tamanho N, o número de iterações é N-1, ou seja, se a lista possui 5 elementos, o número de iterações será 4.
  • Ao final de uma iteração, um elemento já estará na ordem certa, sendo desnecessário realizar outras comparações com ele nas próximas iterações, o que faz diminuir o número de comparações. Assim, para a mesma lista com 5 elementos, na primeira iteração realizam-se 4 comparações, na segunda realizam-se 3 comparações, e assim por diante.

Pseudocódigo

Neste tópico, apresentaremos duas versões de pseudocódigo do método de ordenação bolha. Primeiramente, a versão clássica, que realiza todas as iterações, mesmo se a lista já estiver ordenada. Em seguida, uma versão que melhora o método, contendo uma condição de parada que finaliza o algoritmo quando a lista já estiver ordenada.

Pseudocódigo do algoritmo bolha: versão clássica

A seguir, iremos apresentar o pseudocódigo e explicaremos cada uma de suas linhas. Vejamos: 

1  pseudocódigo bolha(lista X com N elementos):

2    para i de 1 até N-1 faça:    

3      para j de 1 até N-i faça:

4        se X[j] > X[j+1] então

5           trocar(X[j], X[j+1])

6        fim_se

7      fim_para 

8   fim_para 

9 fim

Basicamente, as linhas de 2 a 5 definem o algoritmo:

  • Linha 2: inicia o laço com a quantidade de iterações. Observe que o número de iterações é N-1;
  • Linha 3: inicia o laço para percorrer a lista. Veja bem a expressão “até N – i”, indicando que a medida que aumenta o número de iterações (variável i), a lista a ser percorrida será menor. Isso ocorre porque como o maior elemento irá para o fim, ao final da primeira iteração ele já estará ordenado, não sendo necessário realizar comparações com ele nas demais iterações, fazendo com que, na segunda iteração, seja necessário percorrer somente até o penúltimo elemento, e assim, a cada iteração o algoritmo percorre um elemento a menos na lista.
  • Linhas 4 e 5: aqui é feita a comparação entre o elemento atual e o próximo. Se o valor do elemento atual for maior que o valor do próximo, é realizada a troca, indicada na linha 5.

Antes de mais nada, o problema deste pseudocódigo é que se ele receber uma lista ordenada como parâmetro, mesmo assim irá executar todas as iterações e percorrer a lista, fazendo todas as comparações, mas não realizando nenhuma troca. Isso é uma grande perda de desempenho. 

Pseudocódigo do algoritmo bolha: versão melhorada

Para melhorar o método de ordenação bolha, há uma variação com condição de parada, que verifica se o houve troca em algum momento ao percorrer a lista. Assim, se não houve nenhuma troca após uma iteração, a lista está ordenada e não é necessário continuar a execução do algoritmo. Dessa forma, vejamos como fica:

1 pseudocódigo bolha2(lista X com N elementos):

2    i = 1

3    faça

4      trocou = false      

5      para j de 1 até N-i faça:

6        se X[j] > X[j+1] então

7           trocar(X[j], X[j+1])

8           trocou = true

9        fim_se

10     fim_para 

11     i = i + 1

12   enquanto(trocou)

13 fim

Vejam que adicionamos a variável booleana “trocou”, que a cada iteração inicializará com o valor “false”, mas se durante a iteração houver alguma troca, o valor passará a ser “true”. Logo, quando não houver trocas, a lista estará ordenada. Por fim, para reduzir o número de comparações, mantivemos a variável i, incrementando-a a cada iteração.

Exemplo (Passo a passo)

Para facilitar a compreensão, vejamos a seguir um exemplo de ordenação, através do método de ordenação bolha, de uma lista com 5 elementos, ou seja, N = 5. A lista a ser ordenada é a seguinte [8, 4, 3, 5, 2]. Dessa forma, o número de iterações será 4, pois N – 1 = 5 – 1 = 4.

Na primeira iteração (i = 1), o método percorrerá a lista completa (N – i = 5 – 1 = 4), comparando os elementos dois a dois – na verdade percorrerá até o penúltimo elemento, mas este será comparado com o último, pois as comparações são sempre do elemento atual com o próximo. Vejamos:

Método de ordenação bolha: primeira iteração

Método de ordenação bolha: primeira iteração

Observe que ao final da primeira iteração, o maior elemento já está na ordem certa, não sendo necessário realizar novas comparações deste com outros elementos nas próximas iterações. Portanto, para a segunda iteração (i = 2), o último elemento não participará, sendo que o algoritmo só percorrerá até o 3º elemento (N – i = 5 – 2 = 3), que será comparado com o 4º.

Método de ordenação bolha: segunda iteração

Método de ordenação bolha: segunda iteração

Ao final da segunda iteração, já temos dois elementos ordenados nas últimas posições. Sendo assim, na terceira iteração (i = 3), serão realizadas comparações apenas com os três primeiros elementos.

Método de ordenação bolha: terceira iteração

Método de ordenação bolha: terceira iteração

Aqui já temos os três últimos elementos ordenados, restando apenas os dois primeiros, ou seja, apenas uma comparação. Para isso, na quarta iteração (i = 4) precisaremos de apenas uma comparação (j = N – i = 5 – 4 = 1).

Método de ordenação bolha: quarta iteração

Método de ordenação bolha: quarta iteração

Ao final da quarta iteração, temos a lista ordenada. Observe que para ordenar a lista foram feitas 10 comparações e 8 trocas. Saber disso é importante, pois as bancas costumam cobrar bastante, tanto é que caiu questão assim na última prova do Banco do Brasil e também do Banco da Amazônia, organizadas pelas banca Cesgranrio.

Para calcular rapidamente o número de comparações que o algoritmo bolha realiza, basta utilizarmos a seguinte fórmula: Comparações = N(N-1)/2, em que N é o tamanho da lista. Portanto, se o tamanho da lista é 5, então o algoritmo fará 5*(5-1)/2 = 5*4/2 = 10 comparações. Caso o tamanho seja 10, o algoritmo fará 10*9/2 = 45 comparações

Apenas cuidado, pois o comando da questão pode dizer que o algoritmo irá parar de executar quando não houver mais trocas, ou em outro momento. Assim, se for dessa forma, para saber o número de comparações deverá ser realizado o passo a passo.

Por fim, em relação ao número de trocas realizadas, não tem jeito, deve ser realizado o passo a passo do algoritmo.

Análise de Complexidade do Método de Ordenação Bolha

O algoritmo de ordenação bolha, embora seja popular, apresenta desempenho ruim se comparado a outros algoritmos de ordenação. 

Isso se deve à sua complexidade, que é quadrática, O(n²), ou seja, o esforço computacional despendido pelo algoritmo varia de ordem quadrática de acordo com o tamanho do problema. Isso acontece porque o método bolha utiliza dois laços de repetição aninhados.

Continuando, uma complexidade quadrática, O(n²), indica basicamente que conforme o tamanho da lista aumenta, o tempo para executar aumenta quadraticamente. 

Por exemplo, suponhamos que para uma lista de 10 elementos, o algoritmo consome 100 segundos de tempo. Então, se aumentarmos a lista para 30 elementos, o tempo consumido passa a ser 900 segundos. Sendo assim, observe que o tempo gasto neste exemplo é o número de elementos ao quadrado, ou seja, complexidade quadrática.

Devido ao problema de desempenho, o algoritmo da bolha só é indicado para problemas pequenos,  que requeiram uma pequena quantidade de dados. Assim, para problemas maiores e mais complexos, existem outros algoritmos que são mais eficientes, como quick sort e merge sort.

A seguir, veremos um pequeno resumo com informações importantes que podem cair na prova.

Resumo

  • O método de ordenação bolha é um método simples, popular e lento;
  • Seu funcionamento consiste em levar os maiores elementos para o final da lista, comparando os elementos adjacentes dois a dois e ordenando os que estão fora de ordem;
  • O número de comparações que o algoritmo faz segue a seguinte fórmula: comparações = N*(N-1)/2;
  • Este algoritmo possui complexidade quadrática O(n²).

Vamos praticar!

Agora faremos uma questão sobre o algoritmo de ordenação bolha que caiu no último concurso do Banco do Brasil.

Ano: 2021 Banca: CESGRANRIO Órgão: Banco do Brasil Prova: CESGRANRIO – 2021 – Banco do Brasil – Agente de Tecnologia

As agências bancárias negociam seguros residenciais com seus clientes e, muitas vezes, precisam arquivar cópias de forma ordenada para que consultas eventuais sejam facilitadas. O gerente de uma agência precisava ordenar um vetor de documentos referentes a esses seguros, e o seu adjunto, da área de TI, o aconselhou a usar o algoritmo de ordenação chamado Bubble Sort.

Utilizando-se o algoritmo sugerido, qual será a quantidade de trocas de posições realizadas para ordenar, de modo crescente, o vetor de números de contrato (77, 51, 11, 37, 29, 13, 21)?

a) 14

b) 15

c) 16

d) 17

e) 18

Comentário:

Vamos aos pontos chaves:

  • A sequência a ser ordenada pelo programador é [77, 51, 11, 37, 29, 13, 21];
  • O examinador quer saber o número de trocas de posições.

Vamos lá:

  • sequência : [77, 51, 11, 37, 29, 13, 21];
  • 1ª iteração: [51, 11, 37, 29, 13, 21, 77] → 6 trocas;
  • 2ª iteração: [11, 37, 29, 13, 21, 51, 77] → 5 trocas;
  • 3ª iteração: [11, 29, 13, 21, 37, 51, 77] → 3 trocas;
  • 4ª iteração: [11, 13, 21, 29, 37, 51, 77] → 2 trocas;
  • 5ª iteração: [11, 13, 21, 29, 37, 52, 77] → 0 trocas;

Portanto, a resposta é 6+5+3+2 = 16, letra C.

Bem pessoal, enfim terminamos aqui o artigo sobre o método de ordenação bolha, espero que este conteúdo seja útil na sua jornada rumo à aprovação. No próximo artigo desta série, veremos como funciona na prática o algoritmo de ordenação por seleção. Então, bons estudos!

Se preparando para o concurso do Banco do Brasil? Então, confira nossos cursos:

Pacote para o cargo Agente de Tecnologia

Pacotaço (Conteúdo + Passo estratégico) para o cargo Agente de Tecnologia

Assinatura Concursos: Assine 1 ou 2 anos

Quer saber tudo sobre concursos previstos?
Confira nossos artigos!

Concursos abertos

Concursos 2023

Antoniel da Silva Rego

Posts recentes

Irredutibilidade dos adicionais de servidores públicos

Olá, tudo bem? Hoje falaremos sobre a aplicação da regra da irredutibilidade de vencimentos e…

2 horas atrás

Câmara Superior e Câmaras Julgadoras do TIT para SEFAZ/SP

Oi, como vão as coisas?!! Para este texto do Estratégia Concursos pretendemos analisar um assunto muito importante para a prova de Auditor Fiscal de São Paulo: Câmara…

2 horas atrás

Simulado Especial PC SC – Agente e Escrivão

O concurso público PC SC (Polícia Civil do Estado de Santa Catarina) oferece 300 vagas para os cargos de Agente…

3 horas atrás

Simulado Especial AL MS – Técnico e Analista Legislativo

O concurso público AL MS (Assembleia Legislativa do Estado do Mato Grosso do Sul) oferece 80…

3 horas atrás

Simulado Especial TCE RN 2026 – Auditor e Técnico!

Uma das principais ferramentas na preparação para concursos é o Simulado Especial, elaborado pelo nosso…

3 horas atrás

Simulado Final ALERJ – Especialista Legislativo: participe

O concurso público ALERJ (Assembleia Legislativa do Rio de Janeiro) oferece 101 vagas imediatas e…

3 horas atrás