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 Shellsort: algoritmo de ordenação por incrementos

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 Shellsort: algoritmo de ordenação por incrementos (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

Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.Vitor Mineiro
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptxANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptxlvaroSantos51
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
tabela desenhos projetivos REVISADA.pdf1
tabela desenhos projetivos REVISADA.pdf1tabela desenhos projetivos REVISADA.pdf1
tabela desenhos projetivos REVISADA.pdf1Michycau1
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
CLASSE DE PALAVRAS completo para b .pptx
CLASSE DE PALAVRAS completo para b .pptxCLASSE DE PALAVRAS completo para b .pptx
CLASSE DE PALAVRAS completo para b .pptxFranciely Carvalho
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 

Último (20)

Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
Descreve o conceito de função, objetos, imagens, domínio e contradomínio.
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptxANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
tabela desenhos projetivos REVISADA.pdf1
tabela desenhos projetivos REVISADA.pdf1tabela desenhos projetivos REVISADA.pdf1
tabela desenhos projetivos REVISADA.pdf1
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
CLASSE DE PALAVRAS completo para b .pptx
CLASSE DE PALAVRAS completo para b .pptxCLASSE DE PALAVRAS completo para b .pptx
CLASSE DE PALAVRAS completo para b .pptx
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 

Shellsort: algoritmo de ordenação por incrementos

  • 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