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

Quais as provas e etapas do Concurso TRT 10? Veja!

O concurso do Tribunal Regional do Trabalho do Distrito Federal e Tocantins (TRT 10) está…

1 hora atrás

Resumo da semana: concursos abertos e previstos de 2024!

No Resumo da Semana você encontra diversas informações sobre concursos públicos previstos e editais publicados!…

1 hora atrás

Concursos Públicos: 26 editais esta semana; mais de mil vagas

Dezembro está quase no fim, mas se enganou quem pensou que os últimos dias do…

1 hora atrás

Edital Nova Iguaçu é publicado com salário de até R$ 7,3 mil!

São oferecidas vagas para os níveis médio, técnico e superior; inscrições a partir do dia…

2 horas atrás

Concurso Prefeitura de Nova Iguaçu (CGM): saiu EDITAL!

A Prefeitura de Nova Iguaçu, Rio de Janeiro, publicou o edital de concurso público para…

3 horas atrás

Concurso Goiabeira MG: saiu EDITAL com 41 vagas

Foi publicado o edital de concurso público da Prefeitura de Goiabeira, cidade Mineira. O certame…

3 horas atrás