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




Parte 1 de 3 sobre o algoritmo de ordenação shell (concha) conhecido como Shellsort.
a introdução deste tutorial). O algoritmo difere do
    1 INTRODUÇÃO                                        método de inserção direta pelo fato de no lugar
                                                        de considerar o vetor a ser ordenado como um
    Esta série de tutoriais sobre Algoritmos e          único segmento, ele considera vários segmentos
    Estruturas de Dados III foi escrita usando o        sendo aplicado o método de inserção direta em
    Microsoft Windows 7 Ultimate, Microsoft             cada um deles. Basicamente o algoritmo passa
    Office 2010, Bloodshed Dev-C++ versão 4.9.9.2       várias vezes pela lista dividindo o grupo maior em
    (pode ser baixado em http://www.bloodshed.net),     menores. Nos grupos menores é aplicado o
    referências na internet e notas de aula do          método da ordenação por inserção.
    professor quando estudante. Ela cobre desde os
    algoritmos de ordenação, passando pela pesquisa
                                                        2.1 UMA OLHADA NO FUNCIONAMENTO
    em memória primária e culminando com a
    pesquisa em memória secundária.                     DO ALGORITMO
                                                        Note como o tamanho dos anéis
    Nós entendemos que você já conhece o
                                                        de uma concha
    compilador Dev-C++. No caso de você ainda não o
                                                        (shell) vão fi-
    conhecer, dê uma olhada nos tutoriais Dev-C++
                                                        cando cada
    001 a 017, começando pelo Tutorial Dev-C++ -
                                                        vez menores
    001 - Introdução.
                                                        à medida que
    Se não tem problemas com a linguagem C/C++ e        se    aproximam
    o compilador Dev-C++, então o próximo passo é       do centro. Assim
    saber ler, criar e alterar arquivos em disco        também é o fun-
    usando linguagem C/C++. Se ainda não sabe           cionamento do algo-
    como fazê-lo, dê uma olhada nos tutoriais Dev-      ritmo Shellsort.
    C++ 001 e 002, começando pelo Tutorial Dev-C++
                                                        Uma vez calculado um determinado número de
    001 – Criação, Leitura e Alteração de Arquivos.
                                                        posições a comparar, separadas e equidistantes,
    Se sabe todas as coisas anteriores, então a         inicialmente com grande separação, à medida
    próxima etapa é conhecer os algoritmos mais         que o algoritmo avança e as trocas são feitas,
    básicos de ordenação. Em minhas notas de aula       esta separação diminui para um terço, até que a
    você encontra um material básico, porém             separação seja apenas de 1 item.
    detalhado e com algoritmos resolvidos, dos
                                                        Explicando melhor, se houver um vetor de 14
    principais métodos de ordenação existentes.
                                                        posições a ordenar, primeiramente calcula-se um
    Adotaremos o livro Projeto de Algoritmos com        número inicial de posições a comparar. Por
    Implementação em Pascal e C, Editora Cengage        exemplo, digamos que o número calculado seja
    Learning, de Nivio Ziviani, como livro-texto da     13. Assim, o algoritmo vai comparar os itens 1º e
    disciplina. Nele você encontrará os métodos de      14º (1 + 13), ordenando-os caso necessário. Em
    ordenação que iremos estudar.                       seguida, o salto, que era 13, é dividido por 3,
                                                        passando a ser 4. Agora o algoritmo vai comparar
    Seu próximo passo será estudar os algoritmos de     os itens 1º, 5º (1 + 4), 9º (5 + 4) e 13º (9 + 4),
    ordenação por Inserção e por Seleção. Você pode     ordenando-os caso necessário. Em seguida, o
    usar os links anteriores (em inglês) ou fazer uso   salto, que era 4, é dividido por 3, passando a ser
    do livro-texto.                                     1. O algoritmo prossegue, comparando os itens 1
                                                        a 1, desde o 1º, fazendo a ordenação final.
    Se você seguiu todos os passos até aqui, está
    pronto para prosseguir com este tutorial.           Como ocorre na concha natural, os espaços
                                                        (gaps) vão diminuindo à medida que ocorre a
                                                        ordenação.
    2 O ALGORITMO DE ORDENAÇÃO
    SHELLSORT                                           Vamos dar uma olhada na implementação do
                                                        algoritmo Shellsort na próxima listagem, no item
    Criado por Donald Shell em 1959, publicado pela     2.2 e no item 2.3 veremos uma explicação
    Universidade de Cincinnati, Shellsort é o mais      detalhada   com     exemplo   real.   Programas
    eficiente algoritmo de classificação dentre os de   completos no item 3.
    complexidade quadrática. É um refinamento do
    método de inserção direta (se não conhece, releia


1
Ainda não se sabe porque este método é eficiente,   do {
    mas ninguém ainda conseguiu analisar o                gap = 3 * gap + 1;
    algoritmo, por conter problemas matemáticos         } while(gap < size);
    muito difíceis. Sabe-se que a sequência de
    incrementos não deve ser múltipla. Para a           Imagine um vetor de 10 posições:
    sequência de incrementos da listagem 1, existem
                                                        7256310894
    duas conjeturas para o número de comparações,
    a saber:                                            Supondo que "gap" = 3, então teremos as
                                                        seguintes posições selecionadas:
    Conjetura 1: C(n) = O(n1,25)
                                                        7256310894
    Conjetura 2: C(n) = O(n(ln n)2)
                                                        Assim, 7 6 0 4, será um dos subvetores para
    Shellsort é ótimo para arquivos de tamanho
                                                        ordenar. O que aconteceu aqui? "gap" é o
    moderado, uma vez que sua implementação é
                                                        tamanho dos pulos para selecionar o primeiro
    simples e requer pouco código. Existem métodos
                                                        vetor. (A cada três posições ele pega um
    mais eficientes, mas mais complexos de
                                                        elemento.)
    implementar. O tempo de execução é sensível à
    ordem inicial dos dados. É um algoritmo não-        Ele então ordena esse vetor, que ordenado fica:
    estável.
                                                        0467
    2.2 UMA OLHADA NA IMPLEMENTAÇÃO
                                                        Entretanto, ele faz isso dentro do vetor original,
    DO ALGORITMO                                        que ficará assim, após a primeira passagem pelo
    Listagem 1:                                         algoritmo:
    void shellSort(int *vet, int size) {
                                                        0254316897
      int i, j, value;
      int gap = 1;                                      Agora ele repete as operações acima só que ao
      do {                                              invés de iniciar da posição 0, ele iniciará da
        gap = 3 * gap + 1;                              posição 1, ficando selecionados:
      } while(gap < size);
      do {                                              0254316897
        gap /= 3;
        for(i = gap; i < size; i++) {                   Ele ordena esse novo vetor, ficando:
          value = vet[i];
                                                        0254316897
          j = i - gap;
          while(j >= 0 && value < vet[j]) {             Começa então pela posição 2:
            vet [j + gap] = vet[j];
            j -= gap;                                   0254316897
          }
          vet [j + gap] = value;                        Ordenando ficará:
        }
                                                        0214356897
      } while(gap > 1);
    }                                                   Pronto! Ele terminou a primeira parte da
                                                        ordenação. Repare que agora o vetor está semi-
    2.3 UM EXEMPLO PASSO-A-PASSO                        ordenado. E tudo o que foi feito até agora,
                                                        encontra-se nessa parte do código (em vermelho
    O Shellsort divide o vetor em várias partes e
                                                        na listagem 1):
    muitas vezes.
                                                        for(i = gap; i < size; i++) {
    Funciona assim:
                                                          value = vet[i];
    A primeira coisa que ele faz é pegar o tamanho        j = i - gap;
    dos "pulos" (gap, em inglês) para “montar”            while(j >= 0 && value < vet[j]) {
    diversos vetores de menor tamanho (subvetores           vet [j + gap] = vet[j];
    dentro do vetor inicial), através do trecho (em         j -= gap;
    azul, na listagem 1):                                 }
                                                          vet [j + gap] = value;


2
}                                                     void shellSort(int *vet, int size) {
                                                             int i, j, value;
    Agora ele divide o gap por 3, ficando igual a 1 e        int gap = 1;
    repete a operação anterior.
                                                              do {
    Até o momento o vetor está assim:
                                                                 gap = 3 * gap + 1;
    0214356897                                                } while(gap < size);

    Agora vamos repetir a operação anterior com gap           do {
    = 1, selecionando:                                           gap /= 3;
                                                                 for(i = gap; i < size; i++) {
    024356897                                                       value = vet[i];
                                                                    j = i - gap;
    Ordenando a partir da posição 0:
                                                                    while(j >= 0 && value < vet[j]) {
    024356897                                                           vet [j + gap] = vet[j];
                                                                        j -= gap;
    023456897                                                       }
                                                                    vet [j + gap] = value;
    023456897                                                    }
                                                              } while(gap > 1);
    023456879
                                                          }
    Ele repete a operação a partir da posição 1:          int main(int argc, char *argv[])
                                                          {
    023456789                                                int vetor[10];
                                                             int i;
    Ele continua repetindo o trecho em vermelho da
    listagem 1, a partir da posição 2, posição 3 e
                                                              printf("Forneca 10 numeros...n");
    assim por diante.                                         for(i=0;i<10;i++) {
                                                                 printf("Numero %2d: ", i+1);
    Finalmente o algoritmo para, pois a comparação
                                                                 scanf("%d", &vetor[i]);
    while(gap > 1), após o trecho em vermelho da
                                                              }
    listagem 1, já no final do algoritmo, é falsa.

    Exercício de fixação                                      printf("nVetor original: {");
    Faça o teste de mesa para um vetor que tenha os           for(i=0;i<10;i++) {
    valores 12, 43, 1, 6, 56, 23, 52, 9. Depois confira          printf("%d", vetor[i]);
    se o resultado foi idêntico ao que se encontra               if(i<9) printf(", ");
    aqui.                                                     }
                                                              printf("}n");

        Resista à tentação e só expie depois.                shellSort(vetor, 10); // algoritmo da listagem 1

                                                              printf("nVetor ordenado: {");
    3 IMPLEMENTANDO O ALGORITMO                               for(i=0;i<10;i++) {
                                                                 printf("%d", vetor[i]);
    SHELLSORT EM LINGUAGEM                                       if(i<9) printf(", ");
    C/C++                                                     }
                                                              printf("}nn");
    3.1 O USUÁRIO FORNECE OS
                                                              system("PAUSE");
    NÚMEROS                                                   return EXIT_SUCCESS;
    #include <cstdlib>                                    }
    #include <iostream>

    using namespace std;

    // listagem 1


3
3.2 O PROGRAMA GERA UMA                                }
                                                           printf("}n");
    QUANTIDADE FIXA DE NÚMEROS
    ALEATÓRIOS                                             shellSort(vetor, MAX_SIZE);

    #include <cstdlib>
                                                           printf("nVetor ordenado:n{");
    #include <iostream>
                                                           for(i=0;i<MAX_SIZE;i++) {
    #include <time.h>
                                                              printf("%d", vetor[i]);
                                                              if(i<MAX_SIZE-1) printf(", ");
    using namespace std;
                                                           }
                                                           printf("}nn");
    const int MAX_SIZE = 250; // altere aqui a
    quantidade
                                                           system("PAUSE");
                                                           return EXIT_SUCCESS;
    void shellSort(int *vet, int size) {
                                                       }
       int i, j, value;
       int gap = 1;                                    Maximize a tela de saída e use a barra de
                                                       rolagem vertical para ver a saída completa do
        do {                                           programa.
           gap = 3 * gap + 1;
        } while(gap < size);
                                                       3.3. O PROGRAMA GERA UMA
        do {                                           QUANTIDADE QUALQUER DE NÚMEROS
           gap /= 3;                                   ALEATÓRIOS SOLICITADA PELO
           for(i = gap; i < size; i++) {
              value = vet[i];
                                                       USUÁRIO
              j = i - gap;                             Deixarei este a cargo de vocês. Minha sugestão,
              while(j >= 0 && value < vet[j]) {        para simplificar, é fazer um grande vetor,
                  vet [j + gap] = vet[j];              digamos, um milhão de inteiros, e ter uma
                  j -= gap;                            variável que controle o tamanho máximo dos
              }                                        dados que o usuário desejar. Forneça os valores
              vet [j + gap] = value;                   de forma aleatória.
           }
        } while(gap > 1);
    }
                                                       4 TERMINAMOS
                                                       Terminamos por aqui. Clique no menu Arquivo,
    int main(int argc, char *argv[])                   depois clique na opção Sair.
    {
                                                       Corra para o próximo tutorial.
       int vetor[MAX_SIZE];
       int i;

        // nova semente para numeros aleatorios
        srand(time(NULL));

       printf("Gerando     %d    numeros    inteiros
    aleatoriamente.nAguarde...nn", MAX_SIZE);
       for(i=0;i<MAX_SIZE;i++) {
          // gera numeros entre 0 e 99999
          vetor[i]=rand()%100000*rand()%100000;
       }

        printf("nVetor original:n{");
        for(i=0;i<MAX_SIZE;i++) {
           printf("%d", vetor[i]);
           if(i<MAX_SIZE-1) printf(", ");




4

Mais conteúdo relacionado

Mais procurados

Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
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 assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
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
 
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
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaGabriel Albuquerque
 
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
 
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
 
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
 
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
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 

Mais procurados (19)

Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
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 assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
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
 
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...
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma Máxima
 
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
 
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
 
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
 
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
 
Complexidade algoritmos
Complexidade algoritmosComplexidade algoritmos
Complexidade algoritmos
 
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
 

Destaque

Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesMauricio Volkweis Astiazara
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
Metodo de Ordenação Selection sort
Metodo de Ordenação Selection sortMetodo de Ordenação Selection sort
Metodo de Ordenação Selection sortLeno Oliveira
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoDelacyr Ferreira
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPDelacyr Ferreira
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 

Destaque (13)

Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
7 slides
7 slides7 slides
7 slides
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
Metodo de Ordenação Selection sort
Metodo de Ordenação Selection sortMetodo de Ordenação Selection sort
Metodo de Ordenação Selection sort
 
Ordenação por inserção
Ordenação por inserçãoOrdenação por inserção
Ordenação por inserção
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NP
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 

Semelhante a Tutorial aed iii 001 - 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
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
Java basico modulo_03
Java basico modulo_03Java basico modulo_03
Java basico modulo_03wammendes
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoMarcelo Rodrigues
 
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
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 
Matrizes e Vetores para programação
Matrizes e Vetores para programaçãoMatrizes e Vetores para programação
Matrizes e Vetores para programaçãoKamila Joyce
 
Curso De Algoritmo Aula 7
Curso De Algoritmo   Aula 7Curso De Algoritmo   Aula 7
Curso De Algoritmo Aula 7Felipe Santos
 

Semelhante a Tutorial aed iii 001 - 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
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Aula 01
Aula 01Aula 01
Aula 01
 
Pipeline
PipelinePipeline
Pipeline
 
Ap algoritmosglauco
Ap algoritmosglaucoAp algoritmosglauco
Ap algoritmosglauco
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Java basico modulo_03
Java basico modulo_03Java basico modulo_03
Java basico modulo_03
 
Aula3
Aula3Aula3
Aula3
 
Semanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantesSemanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantes
 
Introducao a Lógica de Programação
Introducao a Lógica de ProgramaçãoIntroducao a Lógica de Programação
Introducao a Lógica de Programação
 
Aula 3
Aula 3Aula 3
Aula 3
 
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)
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Matrizes e Vetores para programação
Matrizes e Vetores para programaçãoMatrizes e Vetores para programação
Matrizes e Vetores para programação
 
Curso De Algoritmo Aula 7
Curso De Algoritmo   Aula 7Curso De Algoritmo   Aula 7
Curso De Algoritmo Aula 7
 
Test-driven Development
Test-driven DevelopmentTest-driven Development
Test-driven Development
 
modulo1.pdf
modulo1.pdfmodulo1.pdf
modulo1.pdf
 
4 groebner danton4 dissertacao
4 groebner danton4 dissertacao4 groebner danton4 dissertacao
4 groebner danton4 dissertacao
 

Mais de 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
 
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 (15)

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

Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfGEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfElianeElika
 
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
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
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
 
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
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - DissertaçãoMaiteFerreira4
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 

Último (20)

Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfGEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
 
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
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
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
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
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
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - Dissertação
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 

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

  • 1. ALGORITMOS E ESTRUTURAS DE DADOS III Tutorial 1 (usa o compilador de linguagem C Dev-C++ versão 4.9.9.2) Parte 1 de 3 sobre o algoritmo de ordenação shell (concha) conhecido como Shellsort.
  • 2. a introdução deste tutorial). O algoritmo difere do 1 INTRODUÇÃO método de inserção direta pelo fato de no lugar de considerar o vetor a ser ordenado como um Esta série de tutoriais sobre Algoritmos e único segmento, ele considera vários segmentos Estruturas de Dados III foi escrita usando o sendo aplicado o método de inserção direta em Microsoft Windows 7 Ultimate, Microsoft cada um deles. Basicamente o algoritmo passa Office 2010, Bloodshed Dev-C++ versão 4.9.9.2 várias vezes pela lista dividindo o grupo maior em (pode ser baixado em http://www.bloodshed.net), menores. Nos grupos menores é aplicado o referências na internet e notas de aula do método da ordenação por inserção. professor quando estudante. Ela cobre desde os algoritmos de ordenação, passando pela pesquisa 2.1 UMA OLHADA NO FUNCIONAMENTO em memória primária e culminando com a pesquisa em memória secundária. DO ALGORITMO Note como o tamanho dos anéis Nós entendemos que você já conhece o de uma concha compilador Dev-C++. No caso de você ainda não o (shell) vão fi- conhecer, dê uma olhada nos tutoriais Dev-C++ cando cada 001 a 017, começando pelo Tutorial Dev-C++ - vez menores 001 - Introdução. à medida que Se não tem problemas com a linguagem C/C++ e se aproximam o compilador Dev-C++, então o próximo passo é do centro. Assim saber ler, criar e alterar arquivos em disco também é o fun- usando linguagem C/C++. Se ainda não sabe cionamento do algo- como fazê-lo, dê uma olhada nos tutoriais Dev- ritmo Shellsort. C++ 001 e 002, começando pelo Tutorial Dev-C++ Uma vez calculado um determinado número de 001 – Criação, Leitura e Alteração de Arquivos. posições a comparar, separadas e equidistantes, Se sabe todas as coisas anteriores, então a inicialmente com grande separação, à medida próxima etapa é conhecer os algoritmos mais que o algoritmo avança e as trocas são feitas, básicos de ordenação. Em minhas notas de aula esta separação diminui para um terço, até que a você encontra um material básico, porém separação seja apenas de 1 item. detalhado e com algoritmos resolvidos, dos Explicando melhor, se houver um vetor de 14 principais métodos de ordenação existentes. posições a ordenar, primeiramente calcula-se um Adotaremos o livro Projeto de Algoritmos com número inicial de posições a comparar. Por Implementação em Pascal e C, Editora Cengage exemplo, digamos que o número calculado seja Learning, de Nivio Ziviani, como livro-texto da 13. Assim, o algoritmo vai comparar os itens 1º e disciplina. Nele você encontrará os métodos de 14º (1 + 13), ordenando-os caso necessário. Em ordenação que iremos estudar. seguida, o salto, que era 13, é dividido por 3, passando a ser 4. Agora o algoritmo vai comparar Seu próximo passo será estudar os algoritmos de os itens 1º, 5º (1 + 4), 9º (5 + 4) e 13º (9 + 4), ordenação por Inserção e por Seleção. Você pode ordenando-os caso necessário. Em seguida, o usar os links anteriores (em inglês) ou fazer uso salto, que era 4, é dividido por 3, passando a ser do livro-texto. 1. O algoritmo prossegue, comparando os itens 1 a 1, desde o 1º, fazendo a ordenação final. Se você seguiu todos os passos até aqui, está pronto para prosseguir com este tutorial. Como ocorre na concha natural, os espaços (gaps) vão diminuindo à medida que ocorre a ordenação. 2 O ALGORITMO DE ORDENAÇÃO SHELLSORT Vamos dar uma olhada na implementação do algoritmo Shellsort na próxima listagem, no item Criado por Donald Shell em 1959, publicado pela 2.2 e no item 2.3 veremos uma explicação Universidade de Cincinnati, Shellsort é o mais detalhada com exemplo real. Programas eficiente algoritmo de classificação dentre os de completos no item 3. complexidade quadrática. É um refinamento do método de inserção direta (se não conhece, releia 1
  • 3. Ainda não se sabe porque este método é eficiente, do { mas ninguém ainda conseguiu analisar o gap = 3 * gap + 1; algoritmo, por conter problemas matemáticos } while(gap < size); muito difíceis. Sabe-se que a sequência de incrementos não deve ser múltipla. Para a Imagine um vetor de 10 posições: sequência de incrementos da listagem 1, existem 7256310894 duas conjeturas para o número de comparações, a saber: Supondo que "gap" = 3, então teremos as seguintes posições selecionadas: Conjetura 1: C(n) = O(n1,25) 7256310894 Conjetura 2: C(n) = O(n(ln n)2) Assim, 7 6 0 4, será um dos subvetores para Shellsort é ótimo para arquivos de tamanho ordenar. O que aconteceu aqui? "gap" é o moderado, uma vez que sua implementação é tamanho dos pulos para selecionar o primeiro simples e requer pouco código. Existem métodos vetor. (A cada três posições ele pega um mais eficientes, mas mais complexos de elemento.) implementar. O tempo de execução é sensível à ordem inicial dos dados. É um algoritmo não- Ele então ordena esse vetor, que ordenado fica: estável. 0467 2.2 UMA OLHADA NA IMPLEMENTAÇÃO Entretanto, ele faz isso dentro do vetor original, DO ALGORITMO que ficará assim, após a primeira passagem pelo Listagem 1: algoritmo: void shellSort(int *vet, int size) { 0254316897 int i, j, value; int gap = 1; Agora ele repete as operações acima só que ao do { invés de iniciar da posição 0, ele iniciará da gap = 3 * gap + 1; posição 1, ficando selecionados: } while(gap < size); do { 0254316897 gap /= 3; for(i = gap; i < size; i++) { Ele ordena esse novo vetor, ficando: value = vet[i]; 0254316897 j = i - gap; while(j >= 0 && value < vet[j]) { Começa então pela posição 2: vet [j + gap] = vet[j]; j -= gap; 0254316897 } vet [j + gap] = value; Ordenando ficará: } 0214356897 } while(gap > 1); } Pronto! Ele terminou a primeira parte da ordenação. Repare que agora o vetor está semi- 2.3 UM EXEMPLO PASSO-A-PASSO ordenado. E tudo o que foi feito até agora, encontra-se nessa parte do código (em vermelho O Shellsort divide o vetor em várias partes e na listagem 1): muitas vezes. for(i = gap; i < size; i++) { Funciona assim: value = vet[i]; A primeira coisa que ele faz é pegar o tamanho j = i - gap; dos "pulos" (gap, em inglês) para “montar” while(j >= 0 && value < vet[j]) { diversos vetores de menor tamanho (subvetores vet [j + gap] = vet[j]; dentro do vetor inicial), através do trecho (em j -= gap; azul, na listagem 1): } vet [j + gap] = value; 2
  • 4. } void shellSort(int *vet, int size) { int i, j, value; Agora ele divide o gap por 3, ficando igual a 1 e int gap = 1; repete a operação anterior. do { Até o momento o vetor está assim: gap = 3 * gap + 1; 0214356897 } while(gap < size); Agora vamos repetir a operação anterior com gap do { = 1, selecionando: gap /= 3; for(i = gap; i < size; i++) { 024356897 value = vet[i]; j = i - gap; Ordenando a partir da posição 0: while(j >= 0 && value < vet[j]) { 024356897 vet [j + gap] = vet[j]; j -= gap; 023456897 } vet [j + gap] = value; 023456897 } } while(gap > 1); 023456879 } Ele repete a operação a partir da posição 1: int main(int argc, char *argv[]) { 023456789 int vetor[10]; int i; Ele continua repetindo o trecho em vermelho da listagem 1, a partir da posição 2, posição 3 e printf("Forneca 10 numeros...n"); assim por diante. for(i=0;i<10;i++) { printf("Numero %2d: ", i+1); Finalmente o algoritmo para, pois a comparação scanf("%d", &vetor[i]); while(gap > 1), após o trecho em vermelho da } listagem 1, já no final do algoritmo, é falsa. Exercício de fixação printf("nVetor original: {"); Faça o teste de mesa para um vetor que tenha os for(i=0;i<10;i++) { valores 12, 43, 1, 6, 56, 23, 52, 9. Depois confira printf("%d", vetor[i]); se o resultado foi idêntico ao que se encontra if(i<9) printf(", "); aqui. } printf("}n");  Resista à tentação e só expie depois. shellSort(vetor, 10); // algoritmo da listagem 1 printf("nVetor ordenado: {"); 3 IMPLEMENTANDO O ALGORITMO for(i=0;i<10;i++) { printf("%d", vetor[i]); SHELLSORT EM LINGUAGEM if(i<9) printf(", "); C/C++ } printf("}nn"); 3.1 O USUÁRIO FORNECE OS system("PAUSE"); NÚMEROS return EXIT_SUCCESS; #include <cstdlib> } #include <iostream> using namespace std; // listagem 1 3
  • 5. 3.2 O PROGRAMA GERA UMA } printf("}n"); QUANTIDADE FIXA DE NÚMEROS ALEATÓRIOS shellSort(vetor, MAX_SIZE); #include <cstdlib> printf("nVetor ordenado:n{"); #include <iostream> for(i=0;i<MAX_SIZE;i++) { #include <time.h> printf("%d", vetor[i]); if(i<MAX_SIZE-1) printf(", "); using namespace std; } printf("}nn"); const int MAX_SIZE = 250; // altere aqui a quantidade system("PAUSE"); return EXIT_SUCCESS; void shellSort(int *vet, int size) { } int i, j, value; int gap = 1; Maximize a tela de saída e use a barra de rolagem vertical para ver a saída completa do do { programa. gap = 3 * gap + 1; } while(gap < size); 3.3. O PROGRAMA GERA UMA do { QUANTIDADE QUALQUER DE NÚMEROS gap /= 3; ALEATÓRIOS SOLICITADA PELO for(i = gap; i < size; i++) { value = vet[i]; USUÁRIO j = i - gap; Deixarei este a cargo de vocês. Minha sugestão, while(j >= 0 && value < vet[j]) { para simplificar, é fazer um grande vetor, vet [j + gap] = vet[j]; digamos, um milhão de inteiros, e ter uma j -= gap; variável que controle o tamanho máximo dos } dados que o usuário desejar. Forneça os valores vet [j + gap] = value; de forma aleatória. } } while(gap > 1); } 4 TERMINAMOS Terminamos por aqui. Clique no menu Arquivo, int main(int argc, char *argv[]) depois clique na opção Sair. { Corra para o próximo tutorial. int vetor[MAX_SIZE]; int i; // nova semente para numeros aleatorios srand(time(NULL)); printf("Gerando %d numeros inteiros aleatoriamente.nAguarde...nn", MAX_SIZE); for(i=0;i<MAX_SIZE;i++) { // gera numeros entre 0 e 99999 vetor[i]=rand()%100000*rand()%100000; } printf("nVetor original:n{"); for(i=0;i<MAX_SIZE;i++) { printf("%d", vetor[i]); if(i<MAX_SIZE-1) printf(", "); 4