Algoritmo Bubble Sort comentado
Uma anotação pessoal, mas que também pode ser informativo e ajudar a várias outras pessoas a entenderem melhor sobre esse algoritmo.
Definição: O bubble sort é um algoritmo simples de ordenação que compara pares de elementos adjacentes e os troca se estiverem fora de ordem.
#include<stdio.h>
#include<stdlib.h>
void trocar(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
Essa é a declaração da função trocar, que recebe dois ponteiros para inteiros (int *a e int *b). Esta função tem como objetivo trocar o valor dos inteiros apontados pelos dois ponteiros. Ela é utilizada na implementação do Bubble Sort para trocar os valores dos elementos do vetor.
void bubbleSort(int array[], int quantidade){
int i, j;
for (i = 0; i < quantidade-1; i++){
for (j = 0; j < quantidade-i-1; j++){
if (array[j] > array[j+1]){
trocar(&array[j], &array[j+1]);
}
}
}
}
Essa é a declaração da função bubbleSort, que recebe um vetor de inteiros (int array[ ]) e a quantidade de elementos no vetor (int quantidade).
Essa função implementa o algoritmo Bubble Sort, que é um algoritmo de ordenação simples, mas ineficiente para vetores grandes.
O algoritmo é composto por dois laços for aninhados: o primeiro laço percorre todo o vetor, enquanto o segundo laço percorre somente os elementos ainda não ordenados (os elementos até quantidade-i-1).
Em cada iteração do segundo laço, é verificado se o elemento atual é maior do que o próximo elemento. Se sim, a função trocar é utilizada para trocar os valores dos dois elementos.
int main() {
// Lê os dados de entrada:
int quantidade;
scanf("%d", &quantidade);
int frascos[quantidade];
for (int i = 0; i < quantidade; i++) {
scanf("%d", &frascos[i]);
}
// Executa o algoritmo "bubbleSort" para ordenar os "frascos".
bubbleSort(frascos, quantidade);
// Imprime os "frascos" ordenados.
for (int i = 0; i < quantidade; i++) {
printf("%d ", frascos[i]);
}
return 0;
}
Essa é a função main, que é o ponto de entrada do programa.
Ela começa lendo a quantidade de elementos do vetor (quantidade) com scanf, em seguida cria o vetor frascos com o tamanho especificado pela entrada quantidade e lê seus valores com um laço for.
Depois disso, chama a função bubbleSort para ordenar o vetor frascos, imprime o vetor ordenado com um segundo laço for e retorna 0 para indicar que o programa executou corretamente.
Informação adicional: Bubble Sort utiliza complexidade quadrática O(n²). Essa é a situação quando você tem dois laços encadeados. É o caso do Bubble Sort ou do Shell Sort.