Os algoritmos de ordenação possuem diversas utilidades na Ciência da Computação, dentre elas:
Classificar algoritmos de ordenação por ordem de velocidade é complexo, pois a eficiência de cada algoritmo pode variar dependendo da estrutura dos dados de entrada.
No entanto, um dos mais simples é o Bubble Sort.
O Bubble Sort, ou ordenação por flutuação (literalmente “por bolha”), compara elementos adjacentes e os troca se estiverem na ordem errada. Ele repete este processo até que toda a lista esteja ordenada, é um dos mais fáceis algoritmos para implementar.
Ele possui complexidade O(n^2)
. O termo “O(n^2)
” refere-se à notação Big O(Big O Notation, em inglês), que é uma forma de descrever a complexidade de tempo de um algoritmo.
A notação Big O fornece uma estimativa do tempo de execução de um algoritmo em função do tamanho da entrada, denotado por “n”.
O(n^2) significa que o tempo de execução do algoritmo aumenta proporcionalmente ao quadrado do tamanho da entrada. Em outras palavras, se o tamanho da entrada (
n
) dobrar, o tempo de execução será aproximadamente quatro vezes maior.
O Bubble Sort compara cada par de elementos adjacentes e os troca se estiverem fora de ordem. Isso é feito repetidamente para todos os elementos na lista, resultando em muitas comparações e trocas.
(n-1
) comparações.n-2
) comparações, e assim por diante.(n-1) + (n-2) + ... + 1 = n(n-1)/2
.
Isso se traduz em uma complexidade de tempo de O(n^2), indicando que o tempo de execução cresce quadraticamente com o aumento do tamanho da entrada.
A notação Big O é útil porque permite comparar a eficiência de diferentes algoritmos sem se preocupar com detalhes específicos da implementação ou do hardware. Outros exemplos comuns de complexidade incluem:
Essas expressões ajudam a entender como a performance de um algoritmo escala à medida que o tamanho dos dados de entrada aumenta.
#include <iostream>
#include <vector>
auto bubble_sort = [](std::vector<int>& v){
for (size_t i {}; i < v.size() - 1; ++i){
for (size_t j {}; j < v.size() - (i + 1); ++j){
if(v[j] > v[j + 1]){
std::swap(v[j], v[j + 1]);
}
}
}
};
int main(){
std::vector<int> v {11, 2, 13, 17, 12, 8, 4};
bubble_sort(v);
for(auto &var : v){
std::cout << var << ' ';
}
std::cout.put('\n');
return EXIT_SUCCESS;
}
algoritmos cpp cppdaily programacao desenvolvimento