17
Faculdade de Tecnologia de Presidente Prudente Análise e Desenvolvimento de Sistemas 3º Módulo Algorítmo de Ordenaçã

Algorítimo de ordenação

Embed Size (px)

Citation preview

Page 1: Algorítimo de ordenação

Faculdade de Tecnologia de Presidente Prudente

Análise e Desenvolvimento de Sistemas3º Módulo

Algorítmo de Ordenação

Page 2: Algorítimo de ordenação

O que é?

Algoritmo que coloca os elementos de uma dada sequência em uma certa ordem onde as mais usadas são a numérica e a lexicográfica.

Page 3: Algorítimo de ordenação

Lexigráfica

Analisa a entrada de linhas de caracteres e produz uma seqüência chamada de "símbolos léxicos" (lexical tokens), ou somente "símbolos" (tokens).

Page 4: Algorítimo de ordenação

Shellsort (Diminuição de incrementos)

• Criado por Donald Shell em 1959, publicado pela Universidade de Cincinnati.

• Mais eficiente algoritmo de classificação dentre os de complexidade quadrática.

• É um refinamento do método de inserção direta.

Page 5: Algorítimo de ordenação

Código em Cvoid shellSort(int * vet, int size) { int i , j , value; int gap = 1; do { gap = 3*gap+1; } while(gap < size); do {

gap /= 3;for(i = gap; i < size; i++) {

value =vet[i]; j = i - gap; while (j >= 0 && value < vet[j]) { vet [j + gap] =vet[j]; j -= gap; } vet [j + gap] = value; } } while ( gap > 1);}

Page 6: Algorítimo de ordenação

Exemplo de execuçãoDado o vetor de entrada: 12, 43, 1, 6, 56, 23, 52, 9

12, 43, 1, 6, 56, 23, 52, 912, 43, 1, 6, 56, 23, 52, 91, 43, 12, 6, 56, 23, 52, 91, 6, 12, 23, 56, 43, 52, 91, 6, 12, 23, 52, 43, 56, 91, 6, 12, 23, 52, 9, 56, 431, 6, 12, 9, 52, 23, 56, 431, 6, 9, 12, 52, 23, 56, 431, 6, 9, 12, 23, 52, 56, 431, 6, 9, 12, 23, 52, 43, 561, 6, 9, 12, 23, 43, 52, 56

Obtemos o vetor ordenado: 1, 6, 9, 12, 23, 43, 52, 56.

Page 7: Algorítimo de ordenação
Page 8: Algorítimo de ordenação

Mergesort(Fusão)

• É um exemplo de algoritmo de ordenação do tipo dividir-para-conquistar.

• Criar uma sequência ordenada a partir de duas outras também ordenadas dividindo a sequência original em pares de dados, ordena-as; depois as agrupa em sequências de quatro elementos, e assim por diante, até ter toda a sequência dividida em apenas duas partes. (resumir este tópico)

• Os três passos úteis do algoritmo são: dividir, conquistar e combinar.

Page 9: Algorítimo de ordenação

Vantagem

Algoritmo de ordenação de simples implementação e fácil entendimento utilizando chamadas recursivas.

Page 10: Algorítimo de ordenação

Desvantagem

Alto consumo de memória, devido a série de chamadas recursivas.

Page 11: Algorítimo de ordenação

Código em Cvoid mergesort(int begin, int end){

int left = 0, right = 0, middle = 0;int i = 0;

if(begin == end)

return;

middle = (begin + end)/2;

mergesort(begin,middle);mergesort(middle + 1,end);

left = begin;right = middle + 1;

for(i = begin;i <= end;i++){if(right > end || (left <= middle &&

A[left] <= A[right])){B[i] = A[left];left++;}else{B[i] = A[right];right++;}}for(i = begin;i <= end;i++)A[i] = B[i];

}

Page 12: Algorítimo de ordenação
Page 13: Algorítimo de ordenação

Quicksort(Rápido)

• Método de ordenação muito rápido e eficiente, inventado por C.A.R. Hoare em 1960.

• Foi criado para tentar traduzir um dicionário de inglês para russo, ordenando as palavras.

• O Quicksort é um algoritmo de ordenação por comparação não-estável.

Page 14: Algorítimo de ordenação

Como funciona?

O Quicksort adota a estratégia de divisão e conquista que consiste em rearranjar as chaves de modo que as chaves "menores" precedam as chaves "maiores".

Page 15: Algorítimo de ordenação

C++#include <algorithm>#include <iterator>#include <functional>using namespace std; template <typename T>void sort(T begin, T end) { if (begin != end) { T middle = partition (begin, end, bind2nd(less<iterator_traits<T>::value_type>(), *begin)); sort (begin, middle); sort (max(begin + 1, middle), end); }}

Page 16: Algorítimo de ordenação
Page 17: Algorítimo de ordenação