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

A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary 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
 
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
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.Susana Stoffel
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasillucasp132400
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
Regência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfRegência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfmirandadudu08
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSilvana Silva
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresLilianPiola
 

Último (20)

A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
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
 
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
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.Família de palavras.ppt com exemplos e exercícios interativos.
Família de palavras.ppt com exemplos e exercícios interativos.
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasil
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
Regência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfRegência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdf
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdf
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
Slides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptxSlides 1 - O gênero textual entrevista.pptx
Slides 1 - O gênero textual entrevista.pptx
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
 

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