Conheça os principais algoritmos de ordenação \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 10 Horas 

 50 Min 

 53 Seg 

   Tempo restante da oferta: 10 50 53 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Conheça os principais algoritmos de ordenação  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

# Conheça os principais algoritmos de ordenação

 A ordenação de registros consiste em organizar os dados em ordem crescente ou decrescente. Veja os principais métodos de ordenação e a teoria por trás deles.

 [ Daniel Viana ](https://www.treinaweb.com.br/blog/autor/daniel-viana) 10 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/algoritmos.jpg)  

Imagine como seria buscar um número em um catálogo telefônico se os nomes das pessoas não estivessem listados em ordem alfabética? Seria muito complicado. A ordenação ou classificação de registros consiste em organizá-los em ordem crescente ou decrescente e assim facilitar a recuperação desses dados. A ordenação tem como objetivo facilitar as buscas e pesquisas de ocorrências de determinado elemento em um conjunto ordenado.

> Como preza a estratégia algorítmica: *“Primeiro coloque os números em ordem. Depois decidimos o que fazer.”*

Na computação existe uma série de algoritmos que utilizam diferentes técnicas de ordenação para organizar um conjunto de dados, eles são conhecidos como *Métodos de Ordenação* ou *Algoritmos de Ordenação*. Vamos conhecer um pouco mais sobre eles.

Os métodos de ordenação se classificam em:

- **Ordenação Interna:** onde todos os elementos a serem ordenados cabem na memória principal e qualquer registro pode ser imediatamente acessado.
- **Ordenação Externa:** onde os elementos a serem ordenados não cabem na memória principal e os registros são acessados sequencialmente ou em grandes blocos.

Hoje veremos apenas os métodos de ordenação interna.

Dentro da ordenação interna temos os **Métodos Simples** e os **Métodos Eficientes**:

[  ![C Básico](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/c.svg)   Curso C Básico Conhecer o curso ](https://www.treinaweb.com.br/curso/c-basico)

## Métodos Simples

Os métodos simples são adequados para pequenos vetores, são programas pequenos e fáceis de entender. Possuem complexidade `C(n) = O(n²)`, ou seja, requerem `O(n²)` comparações. Exemplos: *Insertion Sort*, *Selection Sort*, *Bubble Sort*, *Comb Sort*.

*Dica:* Veja uma breve [introdução à análise de algoritmos](https://www.treinaweb.com.br/blog/introducao-a-analise-de-algoritmos)

Nos algoritmos de ordenação as medidas de complexidade relevantes são:

- Número de comparações `C(n)` entre chaves.
- Número de movimentações `M(n)` dos registros dos vetores.

Onde `n` é o número de registros.

#### Insertion Sort

*Insertion Sort* ou ordenação por inserção é o método que percorre um vetor de elementos da esquerda para a direita e à medida que avança vai ordenando os elementos à esquerda. Possui complexidade `C(n) = O(n)` no melhor caso e `C(n) = O(n²)` no caso médio e pior caso. É considerado um método de ordenação estável.

> Um método de ordenação é estável se a ordem relativa dos itens iguais não se altera durante a ordenação.

O funcionamento do algoritmo é bem simples: consiste em cada passo a partir do segundo elemento selecionar o próximo item da sequência e colocá-lo no local apropriado de acordo com o critério de ordenação.

![](https://d2m498l008ebpa.cloudfront.net/2016/12/insertion-sort-animation-2-1.gif)![](https://d2m498l008ebpa.cloudfront.net/2016/12/insertion-sort-animation-1-1.gif)

(Imagens: Wikipedia.org)

Vejamos a implementação:

```c
void insercao (int vet, int tam){
int i, j, x;
for (i=2; i
