SlideShare uma empresa Scribd logo
1 de 17
Faculdade de Tecnologia de
     Presidente Prudente



Algorítmo de Ordenação


                  Análise e Desenvolvimento de Sistemas
                                             3º Módulo
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.
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).
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.
Código em C
void 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);
}
Exemplo de execução
Dado o vetor de entrada: 12, 43, 1, 6, 56, 23, 52, 9

             12, 43, 1, 6, 56, 23, 52, 9
             12, 43, 1, 6, 56, 23, 52, 9
             1, 43, 12, 6, 56, 23, 52, 9
             1, 6, 12, 23, 56, 43, 52, 9
             1, 6, 12, 23, 52, 43, 56, 9
             1, 6, 12, 23, 52, 9, 56, 43
             1, 6, 12, 9, 52, 23, 56, 43
             1, 6, 9, 12, 52, 23, 56, 43
             1, 6, 9, 12, 23, 52, 56, 43
             1, 6, 9, 12, 23, 52, 43, 56
             1, 6, 9, 12, 23, 43, 52, 56
  Obtemos o vetor ordenado: 1, 6, 9, 12, 23, 43, 52, 56.
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.
Vantagem


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


  Alto consumo de memória, devido a série de
chamadas recursivas.
Código em C
void mergesort(int begin, int end)        for(i = begin;i <= end;i++)
{                                                   {
        int left = 0, right = 0, middle                       if(right > end ||
= 0;                                      (left <= middle && A[left] <=
        int i = 0;                        A[right]))
                                                              {
         if(begin == end)                                                B[i] =
                   return;                A[left];
                                                                         left++;
         middle = (begin + end)/2;                            }
                                                              else
         mergesort(begin,middle);                             {
         mergesort(middle + 1,end);                                      B[i] =
                                          A[right];
                                                                         right++;
         left = begin;                                        }
         right = middle + 1;                        }
                                                    for(i = begin;i <= end;i++)
                                                              A[i] = B[i];
                                          }
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.
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".
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);
  }
}
Algorítimo de ordenação
Algorítimo de ordenação

Mais conteúdo relacionado

Mais procurados (20)

Numeros complexos
Numeros complexosNumeros complexos
Numeros complexos
 
Números Complexos
Números ComplexosNúmeros Complexos
Números Complexos
 
Segunda parte
Segunda parteSegunda parte
Segunda parte
 
Intervalos Reais
Intervalos Reais Intervalos Reais
Intervalos Reais
 
Números complexos
Números complexos Números complexos
Números complexos
 
Números complexos
Números complexosNúmeros complexos
Números complexos
 
3º ano conjuntos numéricos
3º ano   conjuntos numéricos3º ano   conjuntos numéricos
3º ano conjuntos numéricos
 
MATEMÁTICA - CONJUNTOS NUMÉRICOS - AULA 5
MATEMÁTICA - CONJUNTOS NUMÉRICOS - AULA 5MATEMÁTICA - CONJUNTOS NUMÉRICOS - AULA 5
MATEMÁTICA - CONJUNTOS NUMÉRICOS - AULA 5
 
NUMEROS COMPLEXOS
NUMEROS COMPLEXOSNUMEROS COMPLEXOS
NUMEROS COMPLEXOS
 
Números complexos
Números complexosNúmeros complexos
Números complexos
 
Dvscristovam ativ5
Dvscristovam ativ5Dvscristovam ativ5
Dvscristovam ativ5
 
www.AulasDeMatematicaApoio.com - Matemática - Números Complexos
www.AulasDeMatematicaApoio.com  - Matemática - Números Complexoswww.AulasDeMatematicaApoio.com  - Matemática - Números Complexos
www.AulasDeMatematicaApoio.com - Matemática - Números Complexos
 
Conjuntos, Intervalos Reais e funções
Conjuntos, Intervalos Reais e funçõesConjuntos, Intervalos Reais e funções
Conjuntos, Intervalos Reais e funções
 
NúMeros Complexos
NúMeros ComplexosNúMeros Complexos
NúMeros Complexos
 
Numeros complexos
Numeros complexosNumeros complexos
Numeros complexos
 
www.AulasEnsinoMedio.com.br - Matemática - Números Complexos
www.AulasEnsinoMedio.com.br - Matemática -  Números Complexoswww.AulasEnsinoMedio.com.br - Matemática -  Números Complexos
www.AulasEnsinoMedio.com.br - Matemática - Números Complexos
 
Intervalos Reais
Intervalos ReaisIntervalos Reais
Intervalos Reais
 
NúMeros Complexos Bom
NúMeros Complexos BomNúMeros Complexos Bom
NúMeros Complexos Bom
 
Conjuntos numéricos
Conjuntos numéricosConjuntos numéricos
Conjuntos numéricos
 
Operações com intervalos
Operações com intervalosOperações com intervalos
Operações com intervalos
 

Semelhante a Algorítimo de ordenação

Semelhante a Algorítimo de ordenação (20)

Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Linguagem c wellington telles - aula 06
Linguagem c   wellington telles - aula 06Linguagem c   wellington telles - aula 06
Linguagem c wellington telles - aula 06
 
Metodos de ordenação em c#
Metodos de ordenação em c#Metodos de ordenação em c#
Metodos de ordenação em c#
 
Linguagem c wellington telles - aula 07
Linguagem c   wellington telles - aula 07Linguagem c   wellington telles - aula 07
Linguagem c wellington telles - aula 07
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Resumo computação I
Resumo computação IResumo computação I
Resumo computação I
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Lógica De Programação
Lógica De ProgramaçãoLógica De Programação
Lógica De Programação
 
Pascal
PascalPascal
Pascal
 
Python 02
Python 02Python 02
Python 02
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Herança e_vetores.pdf_
 Herança e_vetores.pdf_ Herança e_vetores.pdf_
Herança e_vetores.pdf_
 
Tutorial aed iii 004 - algoritmo de ordenação quicksort
Tutorial aed iii   004 - algoritmo de ordenação quicksortTutorial aed iii   004 - algoritmo de ordenação quicksort
Tutorial aed iii 004 - algoritmo de ordenação quicksort
 
Tdc2010
Tdc2010Tdc2010
Tdc2010
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 

Algorítimo de ordenação

  • 1. Faculdade de Tecnologia de Presidente Prudente Algorítmo de Ordenação Análise e Desenvolvimento de Sistemas 3º Módulo
  • 2. 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.
  • 3. 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).
  • 4. 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.
  • 5. Código em C void 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); }
  • 6. Exemplo de execução Dado o vetor de entrada: 12, 43, 1, 6, 56, 23, 52, 9 12, 43, 1, 6, 56, 23, 52, 9 12, 43, 1, 6, 56, 23, 52, 9 1, 43, 12, 6, 56, 23, 52, 9 1, 6, 12, 23, 56, 43, 52, 9 1, 6, 12, 23, 52, 43, 56, 9 1, 6, 12, 23, 52, 9, 56, 43 1, 6, 12, 9, 52, 23, 56, 43 1, 6, 9, 12, 52, 23, 56, 43 1, 6, 9, 12, 23, 52, 56, 43 1, 6, 9, 12, 23, 52, 43, 56 1, 6, 9, 12, 23, 43, 52, 56 Obtemos o vetor ordenado: 1, 6, 9, 12, 23, 43, 52, 56.
  • 7.
  • 8. 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.
  • 9. Vantagem Algoritmo de ordenação de simples implementação e fácil entendimento utilizando chamadas recursivas.
  • 10. Desvantagem Alto consumo de memória, devido a série de chamadas recursivas.
  • 11. Código em C void mergesort(int begin, int end) for(i = begin;i <= end;i++) { { int left = 0, right = 0, middle if(right > end || = 0; (left <= middle && A[left] <= int i = 0; A[right])) { if(begin == end) B[i] = return; A[left]; left++; middle = (begin + end)/2; } else mergesort(begin,middle); { mergesort(middle + 1,end); B[i] = A[right]; right++; left = begin; } right = middle + 1; } for(i = begin;i <= end;i++) A[i] = B[i]; }
  • 12.
  • 13. 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.
  • 14. 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".
  • 15. 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); } }