Skip to content

Seleção

Overview

Os algoritmos de inserção, bolha e seleção possuem complexidade \(O(n^2)\).

  • Inserção
  • Bolha
  • Seleção

Os algoritmos quicksort, mergesort e heapsort possuem complexidade \(O(n\cdot log\ n)\).

  • Quicksort
  • Mergesort
  • Heapsort

A ordenação, utilizando algoritmos linearítimicos, compensa para uma grande quantidade de buscas (muito mais que n buscas), compensa. Ordenar e buscar tem custo \(O(n\cdot log n + log n)\).

Os algoritmos shell, contagem e distribuição possuem complexidade \(O(n)\). Esses três algoritmos partem de alguma premissa em relação aos dados a serem ordenados.

  • Shell
  • Contagem
  • Distribuição

Ordenação por inserção

Dado um vetor v[0...n-1] com n elementos:

Ideia: Para cada i de 0...n-1 insere-se v[i] na posição correta do subvetor v[0...i].

Exemplo:

    [4, -3, 2, 7, 1]
1º Passo: i = 0, não há nenhum elemento em v[0...i];
2º Passo: i = 1, como -3 é menor que 4, inserimos -3 na posição 0.
    [-3, 4, 2, 7, 1]
3º Passo: i = 2, como 2 é menor que 4, movemos 4 para frente. Como e é maior que -3, essa é posição final dele.
    [-3, 2, 4, 7, 1]
4º Passo: 
    [-3, 2, 4, 7, 1]
5º Passo:
    [-3, 2, 4, 1, 7]
    [-3, 2, 1, 4, 7]
    [-3, 1, 2, 1, 7]

O pior caso ocorre quando o elemento retirado é comparado com todos a esquerda, o que acontece quando o vetor está ordenado no sentido contrário ao desejado. Nesse caso, será feita a seguinte quantidade de comparações:

\(1 + 2 + ... + n-1 = \frac{n\cdot(a_n+a_1)}{2}=\frac{(n-1)\cdot n}{2} \Rightarrow O(n^2)\).

O melhor caso ocorre quando o elemento retirado é maior que o antecessor (vetor em ordem crescente). Nesse caso a complexidade é linear. \(\Rightarrow O(n)\).

Caso médio: \(O(n^2)\)

Ordenação por seleção

Ideia: Para cada i, de 0 a n-1, selecione o menor elemento do subvetor v[i...n-1] e insira-o em v[i].

O custo de encontrar o menor elemento do subvetor tem custo \(O(n)\), e o custo da ordenação por seleção é de \(O(n^2)\).

Estabilidade

Dizemos que um algoritmo de ordenação é estável se ele conserva a ordem relativa de elementos iguais.

O algoritmo de ordenação por inserção é estável. A demonstração pode ser feita por indução sobre o tamanho do vetor. Já o de seleção, não é estável.

Exemplo: considerando o vetor \([4_a, 2, 4_b, 1]\), temos que a ordenação pelo algoritmo da seleção geraria \([1, 2, 4_b, 4_a]\).