Medindo o tempo de execução do algoritmo Insertion Sort em um experimento simples

O ponto de partida

Insertion Sort é um dos algoritmos com os quais logo se tem contato na ciência da computação ou cursos correlatos.

Simples, direto, quase intuitivo. Você percorre o array e vai inserindo cada elemento na posição correta.

Então a motivação aqui não foi “entender como funciona”.

Foi outra:

sair do nível teórico e observar o comportamento quando você mede de verdade


Implementar é o básico

A implementação segue o caminho esperado:

Nada além do necessário.

E isso é intencional — quanto mais simples a base, mais claro fica o comportamento do algoritmo.


Onde começa a ficar interessante

A diferença aqui foi tratar a medição como parte central.

Usei clock_gettime com CLOCK_MONOTONIC para capturar tempo de execução real.

Porque dizer que o algoritmo é $O(n^2)$ é fácil.

o que importa é ver o que isso significa quando você roda de fato


O que acontece na medição

Com poucos elementos, o algoritmo é rápido.

Direto, eficiente, sem overhead.

Mas conforme o volume cresce, o comportamento começa a se acumular:

Nada disso é surpresa — mas ver acontecendo é diferente.


Gráfico

Gráfico Insertion Sort

Insertion Sort — crescimento acelerado do tempo

O gráfico deixa isso bem claro.

O crescimento começa controlado, mas rapidamente foge de escala.

É o $n^2$ aparecendo sem suavização.


Um detalhe que chama atenção

O custo do algoritmo não está distribuído de forma uniforme.

Ele se acumula nas inserções.

Quanto mais o array cresce, mais caro fica manter a ordenação incremental.

E isso cria um efeito cascata que domina o tempo total.


Limitações

A medição aqui não tenta ser rigorosa ao extremo:

Não é benchmark formal.

Mas também não precisa ser pra mostrar o comportamento.


Por que esse projeto existe

Esse projeto não é sobre o algoritmo em si.

É sobre observar o limite dele.

Porque enquanto o Insertion Sort funciona muito bem em cenários pequenos ou parcialmente ordenados, ele tem um ponto claro onde deixa de ser viável.


Fechamento

Insertion Sort é simples — e essa simplicidade é exatamente o que o torna útil em certos contextos.

Mas ela também impõe um limite.

Quando você mede, esse limite deixa de ser teórico e vira algo concreto.

E isso muda completamente a forma como você enxerga o algoritmo.


Código

Você pode encontrar o projeto completo aqui.