terça-feira, 19 de janeiro de 2016

Métodos de ordenação

Hoje iremos falar sobre métodos de ordenação.

Ordenação é o ato de classificar uma sequência de elementos em uma ordem predefinida, geralmente em ordem crescente ou decrescente.

Dado uma sequência de n elementos:
<a1, a2, a3, ..., an>

A saída será uma permutação (reordenada):
<a'1, a'2, a'3, ..., a'n>

tal que:
a'1  a'2  a'3  ...  a'n
Os algoritmos que ordenam um conjunto de elementos são os algoritmos de ordenação, são exemplos de algoritmos de ordenação BubbleSort, InsertionSort, SelectionSort, MergeSort e QuickSort.

A princípio introduziremos com os métodos de ordenação mais simples, BubbleSort, InsertionSort e SelectionSort.

Para os psuedo-códigos adotaremos A sendo o vetor de elementos, p a posição de início do vetor e r a posição final do vetor.


  • BubbleSort

A ordenação por flutuação. A ideia é percorrer o vetor e a cada passagem flutuando para o topo o maior elemento da sequência. Essa movimentação lembra a forma como as bolhas em um tanque de água procuram seu próprio nível, e disso vem o nome do algoritmo.

Pseudo-código
Algoritmo BubbleSort (A, p, r)
    para ls ← n até 2 faça
        para i ← 1 até ls - 1 faça
            se A[i] > A[i+1] então
                troca (A[i], A[i+1])

Complexidade:
Melhor caso: Θ(n2)
Pior caso: Θ(n2)

  • InsertionSort

A ordenação por inserção. O funcionamento do algoritmo é percorrer um vetor da esquerda para a direita de forma que os elementos mais à esquerda fiquem ordenados. O algoritmo de inserção é similar a organização das cartas em um jogo de baralho.

Foto: Wikipédia

Pseudo-código
Algoritmo InsertionSort (A, p, r)
    para i ← p + 1 até r faça
        k ← A[i]
            j ← i - 1
        enquanto j ≥ p e A[j] > k
            A[j+1] ← A[j]
            j ← j + 1
    A[j+1] ← k

Complexidade:
Melhor caso: Θ(n)
Pior caso: Θ(n2)

  • SelectionSort

A ordenação por seleção tem o objetivo colocar o menor valor para a primeira posição, depois o de segundo menor valor para a segunda posição, e assim sucessivamente.

Foto: Wikipédia

Pseudo-código
Algoritmo SelectionSort (A, p, r)
    para i ← p até r - 1 faça
        j ← i + 1
        para k ← j + 1 até r faça
            se A[k] < A[j] então
                j ← k
        se A[j] < A[i] então
            troca(A[i], A[j])

Complexidade:
Melhor caso: Θ(n2)
Pior caso: Θ(n2)


0 comentários:

Postar um comentário