SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
ALGORITMOS E ESTRUTURAS DE DADOS III
                                     Tutorial 2 (usa o compilador de linguagem C Dev-C++ versão 4.9.9.2)




Parte 2 de 3 sobre o algoritmo de ordenação shell (concha) conhecido como Shellsort.
2 O ALGORITMO DE ORDENAÇÃO
    1 INTRODUÇÃO
                                                        SHELLSORT
    Esta série de tutoriais sobre Algoritmos e
    Estruturas de Dados III foi escrita usando o        O sort por inserção é lento porque troca apenas
    Microsoft Windows 7 Ultimate, Microsoft             elementos adjacentes. Por exemplo, se o menor
    Office 2010, Bloodshed Dev-C++ versão 4.9.9.2       elemento estiver no final do arranjo, são
    (pode ser baixado em http://www.bloodshed.net),     necessários N passos para colocá-lo em seu
    referências na internet e notas de aula do          devido lugar. O Shellsort é uma extensão simples
    professor quando estudante. Ela cobre desde os      do sort por inserção, que ganha velocidade por
    algoritmos de ordenação, passando pela pesquisa     permitir a troca de elementos distantes entre si.
    em memória primária e culminando com a
                                                        A ideia é arranjar os dados de tal forma que,
    pesquisa em memória secundária.
                                                        tomando-se seu h-ésimo elemento (a partir de
    Nós entendemos que você já conhece o                qualquer posição), tem-se um arranjo ordenado,
    compilador Dev-C++. No caso de você ainda não o     dito h-ordenado. Falando de outra forma, um
    conhecer, dê uma olhada nos tutoriais Dev-C++       arranjo h-ordenado é composto de h arranjos
    001 a 017, começando pelo Tutorial Dev-C++ -        ordenados, tomados juntos. Através da h-
    001 - Introdução.                                   ordenação para valores grandes de h, pode-se
                                                        mover elementos dentro do arranjo por grandes
    Se não tem problemas com a linguagem C/C++ e        distâncias, e assim ordenar mais facilmente para
    o compilador Dev-C++, então o próximo passo é       valores menores que h. Usando-se este
    saber ler, criar e alterar arquivos em disco        procedimento para qualquer sequência de valores
    usando linguagem C/C++. Se ainda não sabe           que termine no tamanho 1 produzirá um arranjo
    como fazê-lo, dê uma olhada nos tutoriais Dev-      totalmente ordenado.
    C++ 001 e 002, começando pelo Tutorial Dev-C++
    001 – Criação, Leitura e Alteração de Arquivos.     Uma maneira de implementar o Shellsort é, para
                                                        cada     h,     usar    o   sort   de   inserção
    Se sabe todas as coisas anteriores, então a         independentemente em cada um dos h
    próxima etapa é conhecer os algoritmos mais         subarranjos. A escolha dos valores de h pode ser
    básicos de ordenação. Em minhas notas de aula       feita pelo critério de Knuth [Niemann 97] 1, como
    você encontra um material básico, porém             se segue:
    detalhado e com algoritmos resolvidos, dos
    principais métodos de ordenação existentes.         Faça h1 = 1, hs+1 = 3hs +1, e pare com ht quando
                                                        ht + 2 ≥ N.
    Adotaremos o livro Projeto de Algoritmos com
    Implementação em Pascal e C, Editora Cengage        Assim, os valores de h são computados como se
    Learning, de Nivio Ziviani, como livro-texto da     segue:
    disciplina. Nele você encontrará os métodos de
                                                        h1 = 1
    ordenação que iremos estudar.
                                                        h2 = (3 * 1) + 1 = 4
    Seu próximo passo será estudar os algoritmos de
    ordenação por Inserção e por Seleção. Você pode     h3 = (3 * 4) + 1 = 13
    usar os links anteriores (em inglês) ou fazer uso
    do livro-texto.                                     h4 = (3 * 13) + 1 = 40

    Em seguida, você precisa conhecer o algoritmo       h5 = (3 * 40) + 1 = 121
    Shellsort. Para isto, você pode seguir o Tutorial
                                                        h6 = (3 * 121) + 1 = 364 etc.
    AED 001, desta série, e/ou ler o capítulo
    referente no livro-texto.                           Uma propriedade muito importante [Sedgewick
                                                        86]2 é a seguinte:
    Se você estiver lendo este tutorial tenha certeza
    de ter seguido o Tutorial AED 001. Agora que        Shellsort nunca realiza mais do que N3/2
    você seguiu todos os passos até aqui, está pronto   comparações (para os incrementos 1, 4, 13, ...).
    para prosseguir com este tutorial.
                                                        1 Niemann, Thomas. Sorting and searching algorithms: a
                                                        cookbook. http://www.geocities.com/SoHo/2167/book.html.
                                                        2 Sedgewick, Robert. Algorithms. Addison Wesley, 1986.




1
Uma implementação para o Shellsort é vista na            }
    listagem 1 e na listagem 2:                              vet [j + gap] = value;
                                                             }
    2.1 FUNCIONAMENTO DO ALGORITMO                         } while(gap > 1);
                                                       }
    Acompanhe pela listagem 1. Primeiro ciclo do-
    while gera sequência: 1 4 13 40 121 364 1093       Listagem 2:
    3280 ...                                           void shellSort(int *vetor, int tamanho)
                                                       {
    Segundo ciclo for é executado para os valores de
                                                         int i = (tamanho - 1) / 2;
    h por ordem inversa.
                                                         int chave, k, aux;
     Operação (vetor com tamanho 100):
       Para cada valor de h, 40, 13, 4, 1:                while(i != 0)
          Utilizar ordenação por inserção para            {
            criar subvetores ordenados dentro de             do
            vetor com tamanho 100.                           {
             Vector fica h-ordenado.                            chave = 1;
                                                                for(k = 0; k < MAX - i; ++k)
          Para h = 40 existem 40 subvetores
                                                                {
            ordenados, cada um com 2/3
                                                                  if(vetor[k] > vetor[k + i])
            elementos.
                                                                  {
          Para h = 13 existem 13 subvetores
                                                                     aux = vetor[k];
            ordenados, cada um com 7/8
                                                                     vetor[k] = vetor[k + i];
            elementos.
                                                                     vetor[k + i] = aux;
          ...
                                                                     chave = 0;
          Para h = 1 existe 1 (subvetor
                                                                  }
            ordenado, com 100 elementos.
                                                                }
                                                             } while(chave == 0);
    2.2 COMPLEXIDADE                                         i = i / 2;
    Complexidade depende da sequência de valores           }
    utilizada:                                         }

     Sequência 1, 4, 13, 40, 121, 364, 1093, ...
                                                       2.4 USANDO LISTAS
       O(N3/2) comparações
     Sequência 1, 8, 23, 77, 281, 1073, 4193, ...     Para sequência de dados muito grande, talvez
       O(N4/3) comparações                            seja melhor uma abordagem usando lista e
     Sequência 1, 2, 3, 4, 6, 9, 8, 12, 18, 27, 16,   ordenação por seleção.
      24, ...
       O(N(log N)2) comparações                       Uma sugestão poderia ser:

                                                       Interface:
    2.3 IMPLEMENTAÇÕES                                 typedef struct node *link;
    Listagem 1:                                        struct node {Item item; link next;};
    void shellSort(int *vet, int size) {               link NEW(Item, link);
     int i, j, value;                                  link init(int);
     int gap = 1;                                      void show(link);
     do {                                              link sort(link);
       gap = 3 * gap + 1;
                                                       Seleção:
     } while(gap < size);
                                                       link listselection(link h) {
     do {
                                                         link max, t, out = NULL;
       gap /= 3;
                                                         while(h->next != NULL) {
       for(i = gap; i < size; i++) {
                                                           max = findmax(h);
         value = vet[i];
                                                           t = max->next; max->next = t->next;
         j = i - gap;
                                                           t->next = out; out = t;
         while(j >= 0 && value < vet[j]) {
                                                         }
           vet [j + gap] = vet[j];
                                                         h->next = out;
           j -= gap;


2
return(h);
    }

    A cada passo retira o máximo elemento da lista
    atual, e coloca no topo da nova lista.

    Exercício de fixação
    Implemente um algoritmo usando lista e
    ordenação por seleção para ordenar a lista de
    10000 inteiros, fornecida no meu blog.


    4 TERMINAMOS
    Terminamos por aqui. Clique no menu Arquivo,
    depois clique na opção Sair.

    Corra para o próximo tutorial.




3

Mais conteúdo relacionado

Mais procurados

Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenaçãoDaiana de Ávila
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
QAP: Metodos construtivos, 2-opt, Busca tabu
QAP: Metodos construtivos, 2-opt, Busca tabuQAP: Metodos construtivos, 2-opt, Busca tabu
QAP: Metodos construtivos, 2-opt, Busca tabuDaniel Gribel
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2michellobo
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmosSandro Arpi
 
Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05thomasdacosta
 

Mais procurados (19)

Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Recursividade
RecursividadeRecursividade
Recursividade
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
QAP: Metodos construtivos, 2-opt, Busca tabu
QAP: Metodos construtivos, 2-opt, Busca tabuQAP: Metodos construtivos, 2-opt, Busca tabu
QAP: Metodos construtivos, 2-opt, Busca tabu
 
ASP.Net Módulo 2
ASP.Net   Módulo 2ASP.Net   Módulo 2
ASP.Net Módulo 2
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmos
 
Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05
 

Semelhante a Tutorial aed iii 002 - algoritmo de ordenação shellsort

Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsortFlávio Freitas
 
Tutorial aed iii 006 - algoritmo de ordenação quicksort
Tutorial aed iii   006 - algoritmo de ordenação quicksortTutorial aed iii   006 - algoritmo de ordenação quicksort
Tutorial aed iii 006 - algoritmo de ordenação quicksortFlávio Freitas
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 
Introdução ao Octave
Introdução ao OctaveIntrodução ao Octave
Introdução ao OctavePeslPinguim
 
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Leinylson Fontinele
 
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 quicksortFlávio Freitas
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação FuncionalLambda 3
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfEdkallenn Lima
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorialblogmaxima
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 

Semelhante a Tutorial aed iii 002 - algoritmo de ordenação shellsort (20)

Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsort
 
Tutorial aed iii 006 - algoritmo de ordenação quicksort
Tutorial aed iii   006 - algoritmo de ordenação quicksortTutorial aed iii   006 - algoritmo de ordenação quicksort
Tutorial aed iii 006 - algoritmo de ordenação quicksort
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
shellsort.pdf
shellsort.pdfshellsort.pdf
shellsort.pdf
 
Aula 01
Aula 01Aula 01
Aula 01
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Introdução ao Octave
Introdução ao OctaveIntrodução ao Octave
Introdução ao Octave
 
Aula 21
Aula 21Aula 21
Aula 21
 
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
 
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
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 
Programação aula002
Programação aula002Programação aula002
Programação aula002
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 

Mais de Flávio Freitas

Tutorial aed iii 005 - algoritmo de ordenação quicksort
Tutorial aed iii   005 - algoritmo de ordenação quicksortTutorial aed iii   005 - algoritmo de ordenação quicksort
Tutorial aed iii 005 - algoritmo de ordenação quicksortFlávio Freitas
 
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...Flávio Freitas
 
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...Flávio Freitas
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivosFlávio Freitas
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivosFlávio Freitas
 
Aula 001 histórico dos computadores
Aula 001   histórico dos computadoresAula 001   histórico dos computadores
Aula 001 histórico dos computadoresFlávio Freitas
 
Aula 004 noções de hardware
Aula 004   noções de hardwareAula 004   noções de hardware
Aula 004 noções de hardwareFlávio Freitas
 
Aula 005 noções de hardware
Aula 005   noções de hardwareAula 005   noções de hardware
Aula 005 noções de hardwareFlávio Freitas
 
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...Flávio Freitas
 
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Flávio Freitas
 
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Flávio Freitas
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Flávio Freitas
 
Algoritmos para estruturas de dados
Algoritmos para estruturas de dadosAlgoritmos para estruturas de dados
Algoritmos para estruturas de dadosFlávio Freitas
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoFlávio Freitas
 
Matemática computacional aula 002
Matemática computacional   aula 002Matemática computacional   aula 002
Matemática computacional aula 002Flávio Freitas
 
Matemática computacional aula 001
Matemática computacional   aula 001Matemática computacional   aula 001
Matemática computacional aula 001Flávio Freitas
 

Mais de Flávio Freitas (16)

Tutorial aed iii 005 - algoritmo de ordenação quicksort
Tutorial aed iii   005 - algoritmo de ordenação quicksortTutorial aed iii   005 - algoritmo de ordenação quicksort
Tutorial aed iii 005 - algoritmo de ordenação quicksort
 
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
 
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...5º apl   cursos técnicos - informática básica e aplicada 2012 - br office.org...
5º apl cursos técnicos - informática básica e aplicada 2012 - br office.org...
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 
Aula 001 histórico dos computadores
Aula 001   histórico dos computadoresAula 001   histórico dos computadores
Aula 001 histórico dos computadores
 
Aula 004 noções de hardware
Aula 004   noções de hardwareAula 004   noções de hardware
Aula 004 noções de hardware
 
Aula 005 noções de hardware
Aula 005   noções de hardwareAula 005   noções de hardware
Aula 005 noções de hardware
 
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...Aula 001   plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
Aula 001 plan. e sist. comp. aplic. à adm. - o computador na sociedade, nas...
 
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 003   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 003 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
 
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...Aula 004   plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
Aula 004 plan. e sist. comp. aplic. à adm. - estudos dos principais sistema...
 
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
Solução dos exercícios do livro Algoritmos e Estruturas de Dados dos autores ...
 
Algoritmos para estruturas de dados
Algoritmos para estruturas de dadosAlgoritmos para estruturas de dados
Algoritmos para estruturas de dados
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Matemática computacional aula 002
Matemática computacional   aula 002Matemática computacional   aula 002
Matemática computacional aula 002
 
Matemática computacional aula 001
Matemática computacional   aula 001Matemática computacional   aula 001
Matemática computacional aula 001
 

Último

PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfHELENO FAVACHO
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdfmarlene54545
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPaulaYaraDaasPedro
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º anoRachel Facundo
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAssuser2ad38b
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxandrenespoli3
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAO PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAJulianeMelo17
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioDomingasMariaRomao
 

Último (20)

PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAO PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Araribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medioAraribá slides 9ano.pdf para os alunos do medio
Araribá slides 9ano.pdf para os alunos do medio
 

Tutorial aed iii 002 - algoritmo de ordenação shellsort

  • 1. ALGORITMOS E ESTRUTURAS DE DADOS III Tutorial 2 (usa o compilador de linguagem C Dev-C++ versão 4.9.9.2) Parte 2 de 3 sobre o algoritmo de ordenação shell (concha) conhecido como Shellsort.
  • 2. 2 O ALGORITMO DE ORDENAÇÃO 1 INTRODUÇÃO SHELLSORT Esta série de tutoriais sobre Algoritmos e Estruturas de Dados III foi escrita usando o O sort por inserção é lento porque troca apenas Microsoft Windows 7 Ultimate, Microsoft elementos adjacentes. Por exemplo, se o menor Office 2010, Bloodshed Dev-C++ versão 4.9.9.2 elemento estiver no final do arranjo, são (pode ser baixado em http://www.bloodshed.net), necessários N passos para colocá-lo em seu referências na internet e notas de aula do devido lugar. O Shellsort é uma extensão simples professor quando estudante. Ela cobre desde os do sort por inserção, que ganha velocidade por algoritmos de ordenação, passando pela pesquisa permitir a troca de elementos distantes entre si. em memória primária e culminando com a A ideia é arranjar os dados de tal forma que, pesquisa em memória secundária. tomando-se seu h-ésimo elemento (a partir de Nós entendemos que você já conhece o qualquer posição), tem-se um arranjo ordenado, compilador Dev-C++. No caso de você ainda não o dito h-ordenado. Falando de outra forma, um conhecer, dê uma olhada nos tutoriais Dev-C++ arranjo h-ordenado é composto de h arranjos 001 a 017, começando pelo Tutorial Dev-C++ - ordenados, tomados juntos. Através da h- 001 - Introdução. ordenação para valores grandes de h, pode-se mover elementos dentro do arranjo por grandes Se não tem problemas com a linguagem C/C++ e distâncias, e assim ordenar mais facilmente para o compilador Dev-C++, então o próximo passo é valores menores que h. Usando-se este saber ler, criar e alterar arquivos em disco procedimento para qualquer sequência de valores usando linguagem C/C++. Se ainda não sabe que termine no tamanho 1 produzirá um arranjo como fazê-lo, dê uma olhada nos tutoriais Dev- totalmente ordenado. C++ 001 e 002, começando pelo Tutorial Dev-C++ 001 – Criação, Leitura e Alteração de Arquivos. Uma maneira de implementar o Shellsort é, para cada h, usar o sort de inserção Se sabe todas as coisas anteriores, então a independentemente em cada um dos h próxima etapa é conhecer os algoritmos mais subarranjos. A escolha dos valores de h pode ser básicos de ordenação. Em minhas notas de aula feita pelo critério de Knuth [Niemann 97] 1, como você encontra um material básico, porém se segue: detalhado e com algoritmos resolvidos, dos principais métodos de ordenação existentes. Faça h1 = 1, hs+1 = 3hs +1, e pare com ht quando ht + 2 ≥ N. Adotaremos o livro Projeto de Algoritmos com Implementação em Pascal e C, Editora Cengage Assim, os valores de h são computados como se Learning, de Nivio Ziviani, como livro-texto da segue: disciplina. Nele você encontrará os métodos de h1 = 1 ordenação que iremos estudar. h2 = (3 * 1) + 1 = 4 Seu próximo passo será estudar os algoritmos de ordenação por Inserção e por Seleção. Você pode h3 = (3 * 4) + 1 = 13 usar os links anteriores (em inglês) ou fazer uso do livro-texto. h4 = (3 * 13) + 1 = 40 Em seguida, você precisa conhecer o algoritmo h5 = (3 * 40) + 1 = 121 Shellsort. Para isto, você pode seguir o Tutorial h6 = (3 * 121) + 1 = 364 etc. AED 001, desta série, e/ou ler o capítulo referente no livro-texto. Uma propriedade muito importante [Sedgewick 86]2 é a seguinte: Se você estiver lendo este tutorial tenha certeza de ter seguido o Tutorial AED 001. Agora que Shellsort nunca realiza mais do que N3/2 você seguiu todos os passos até aqui, está pronto comparações (para os incrementos 1, 4, 13, ...). para prosseguir com este tutorial. 1 Niemann, Thomas. Sorting and searching algorithms: a cookbook. http://www.geocities.com/SoHo/2167/book.html. 2 Sedgewick, Robert. Algorithms. Addison Wesley, 1986. 1
  • 3. Uma implementação para o Shellsort é vista na } listagem 1 e na listagem 2: vet [j + gap] = value; } 2.1 FUNCIONAMENTO DO ALGORITMO } while(gap > 1); } Acompanhe pela listagem 1. Primeiro ciclo do- while gera sequência: 1 4 13 40 121 364 1093 Listagem 2: 3280 ... void shellSort(int *vetor, int tamanho) { Segundo ciclo for é executado para os valores de int i = (tamanho - 1) / 2; h por ordem inversa. int chave, k, aux;  Operação (vetor com tamanho 100):  Para cada valor de h, 40, 13, 4, 1: while(i != 0)  Utilizar ordenação por inserção para { criar subvetores ordenados dentro de do vetor com tamanho 100. {  Vector fica h-ordenado. chave = 1; for(k = 0; k < MAX - i; ++k)  Para h = 40 existem 40 subvetores { ordenados, cada um com 2/3 if(vetor[k] > vetor[k + i]) elementos. {  Para h = 13 existem 13 subvetores aux = vetor[k]; ordenados, cada um com 7/8 vetor[k] = vetor[k + i]; elementos. vetor[k + i] = aux;  ... chave = 0;  Para h = 1 existe 1 (subvetor } ordenado, com 100 elementos. } } while(chave == 0); 2.2 COMPLEXIDADE i = i / 2; Complexidade depende da sequência de valores } utilizada: }  Sequência 1, 4, 13, 40, 121, 364, 1093, ... 2.4 USANDO LISTAS  O(N3/2) comparações  Sequência 1, 8, 23, 77, 281, 1073, 4193, ... Para sequência de dados muito grande, talvez  O(N4/3) comparações seja melhor uma abordagem usando lista e  Sequência 1, 2, 3, 4, 6, 9, 8, 12, 18, 27, 16, ordenação por seleção. 24, ...  O(N(log N)2) comparações Uma sugestão poderia ser: Interface: 2.3 IMPLEMENTAÇÕES typedef struct node *link; Listagem 1: struct node {Item item; link next;}; void shellSort(int *vet, int size) { link NEW(Item, link); int i, j, value; link init(int); int gap = 1; void show(link); do { link sort(link); gap = 3 * gap + 1; Seleção: } while(gap < size); link listselection(link h) { do { link max, t, out = NULL; gap /= 3; while(h->next != NULL) { for(i = gap; i < size; i++) { max = findmax(h); value = vet[i]; t = max->next; max->next = t->next; j = i - gap; t->next = out; out = t; while(j >= 0 && value < vet[j]) { } vet [j + gap] = vet[j]; h->next = out; j -= gap; 2
  • 4. return(h); } A cada passo retira o máximo elemento da lista atual, e coloca no topo da nova lista. Exercício de fixação Implemente um algoritmo usando lista e ordenação por seleção para ordenar a lista de 10000 inteiros, fornecida no meu blog. 4 TERMINAMOS Terminamos por aqui. Clique no menu Arquivo, depois clique na opção Sair. Corra para o próximo tutorial. 3