SlideShare uma empresa Scribd logo
7
Mais lidos
12
Mais lidos
13
Mais lidos
Algoritmo Shell Sort
Gabriel Ramalho
Túlio Lemes
Vinicius Rodrigues
Dado certo número de elementos, informações ou dados, e a
necessidade de termos que ordená-los em uma ordem predefinida,
se faz necessária a utilização de algoritmos de ordenação. Dentre
as várias razões para se ordenar uma sequência, uma delas é a
possibilidade de acessar seus dados de uma maneira mais
eficiente.
Motivação
Questão: Dado um vetor de elementos não ordenados deve-
se ordená-los de acordo com uma função de comparação
predefinida.
Entrada: Vetor de elementos não ordenados: L[n] = {e1, e2,
e3, …, en}.
Saída: Vetor ordenado.
Descrição:
Visão Geral
● Dividir o vetor em vetores menores, ordenando-os e fazendo isso
novamente para ter um único vetor praticamente ordenado e então
trabalhar em cima dele, que seria mais prático e rápido
● O Shell Sort se baseia em uma variável chamada de incremento
de sequência, ou incremento de shell, que é dado por h e ao
decorrer da execução do algoritmo, é decrementada até 1
● Utilizando o incremento de shell, o algoritmo compara elementos
distantes em um vetor, em vez de comparar os adjacentes
Visão Geral
● No algoritmo, a ordenação é realizada em vários passos, usando
uma sequência de valores do incremento de shell <h1, h2,
h3…hN> onde começando por hN selecionamos apenas os
valores que estão hN elementos distantes um do outro, então
ordenamos esses elementos com algum algoritmo de ordenação
simples como bolha, seleção ou inserção. Deste modo, apenas os
elementos selecionados serão ordenados, os outros são todos
ignorados.
Algoritmo Donald Shell
Função ShellSort(A, n)
aux, i, j, h = n/2;
Enquanto h > 0
i = h;
Enquanto i < n
aux = A[i]
j = i;
Enquanto j >= h && aux < A[j - h]
A[j] = A[j - h];
j = j - h;
A[j] = aux;
i = i +1;
h = h/2;
Exemplo (Donald Shell):
n = 8
h = 4
Exemplo (Donald Shell):
n = 8
h = 2
Exemplo (Donald Shell):
n = 8
h = 1
Exemplo (Donald Shell):
Resultado Final:
● Como escolher valores para h?
○ Existem vários modos de escolher valores para h baseados em
estudos de eficiência
○ O método de seleção de valores para h proposto por Donald
Shell foi h = n/2 onde n é o número de elementos do vetor,
mas já foi provado que sua eficiência é baixa
○ O método de seleção de Donald Knuth, explicado como:
h = 3 * h + 1
E a sequência gerada: 1, 4, 13, 40, 121, 364, 1093, 3280…
Algoritmo Knuth
Função ShellSort(A, n)
i, j , h = 1;
aux;
Enquanto h < n
h = h * 3 + 1;
Enquanto h > 1
h = (h – 1) / 3;
i = h;
Enquanto i < n
aux = A[i];
j = i – h;
Enquanto(j >= 0 && aux < A[j])
A[j + h] = A[j];
j = j – h;
A[j + h] = aux;
i = i + 1;
Prova de Corretude
Sendo L uma lista de n elementos, com n >= 0:
L[n] = { e0, e1, …, en }
Queremos demonstrar que qualquer que seja o valor dos elementos da lista L, através do algoritmo
de inserção, a lista L será ordenada de acordo com uma função de comparação predefinida.
Para qualquer que seja o valor de h:
- sugerido por Shell: n/2, n/4, …, 1
- sugerido por Knuth: …, 40, 13, 4, 1
o último valor de h será sempre 1, logo, para provar a corretude do algoritmo precisamos apenas que
para em h = 1 o algoritmo esteja correto.
Prova de Corretude
Considerando o algoritmo de inserção abaixo:
para j = 1 até n
key = L[j]
i = j - 1
enquanto i >= 0 e compara(L[i], key)
L[i + 1] = L[i]
i = i + 1
L[i+1] = key
Considere que L[0] é um valor já ordenado.
Sendo assim, a cada iteração L[j] é colocado na posição correta e nenhum elemento de L[0..j] se
move além de j.
Logo, quando j = n + 1 então L[n] estará ordenado, como queríamos demonstrar.
Complexidade Pior Caso
● Método de seleção de Donald Shell:
O(n²)
● Método de seleção de Donald Knuth:
O(n^3/2)
Conclusão:
Vantagens:
•  Shell Sort é uma ótima opção para arquivos de tamanho moderado.
•  Sua implementação é simples e requer uma quantidade de código
pequena.
Desvantagens:
•  O tempo de execução do algoritmo é sensível à ordem inicial do arquivo.
•  O método não é estável.
Bibliografia:
● http://cadernogeek.wordpress.com/tag/shell-sort/
● http://www.decom.ufop.br/toffolo/site_media/uploads/2011-
2/bcc202/slides/19._shellsort.pdf
● http://www.lia.ufc.br/~valdisio/ed/PO2.pdf
● http://www.dsc.ufcg.edu.
br/~lbmarinho/slides/atal_2012_1/corretude_2012_1.pdf

Mais conteúdo relacionado

PPTX
PPTX
Shell sort
PPTX
ShellSort - Ordenação
PPTX
Algoritmos de ordenação
ODP
Lista Duplamente Encadeada
PDF
Ordenação
PDF
Revisão Sobre Programação Orientada a Objetos com Java
PDF
Introdução a estruturas de dados em python
Shell sort
ShellSort - Ordenação
Algoritmos de ordenação
Lista Duplamente Encadeada
Ordenação
Revisão Sobre Programação Orientada a Objetos com Java
Introdução a estruturas de dados em python

Mais procurados (20)

PDF
Coeficiente da Silhueta
PPTX
Programação C - Aula 1
PPS
Lipidios
PPTX
Introdução ao editor de texto Word
PDF
Metodos de ordenação estrutura de dados
PDF
Aula 4 - Teste de mesa
PDF
Curso HTML, CSS e JavaScript
PPTX
Estrutura de dados em Java - Recursividade
PDF
Estrutura de Dados - Listas Encadeadas
PDF
Team Software Process (TSP)
PPTX
Modelagem e Simulação de Sistemas Produtivos
PDF
Como descobrir e classificar coisas usando machine learning sem compilcação
PDF
Apostila Microsoft Office Excel 2016
PDF
Diagramas de componentes
PPTX
Aula sobre Condicionais ( if - else ) - Linguagem C
PDF
POO - 16 - Polimorfismo
PDF
Aula Lógica de Programação - cap1
PDF
Teclas de Atalho
ODP
Aula01 - Logica de Programação
PDF
Lista duplamente encadeada em python
Coeficiente da Silhueta
Programação C - Aula 1
Lipidios
Introdução ao editor de texto Word
Metodos de ordenação estrutura de dados
Aula 4 - Teste de mesa
Curso HTML, CSS e JavaScript
Estrutura de dados em Java - Recursividade
Estrutura de Dados - Listas Encadeadas
Team Software Process (TSP)
Modelagem e Simulação de Sistemas Produtivos
Como descobrir e classificar coisas usando machine learning sem compilcação
Apostila Microsoft Office Excel 2016
Diagramas de componentes
Aula sobre Condicionais ( if - else ) - Linguagem C
POO - 16 - Polimorfismo
Aula Lógica de Programação - cap1
Teclas de Atalho
Aula01 - Logica de Programação
Lista duplamente encadeada em python
Anúncio

Destaque (10)

PDF
Tutorial aed iii 002 - algoritmo de ordenação shellsort
PDF
ordenacao shellsort quicksort em C
PDF
Bubble Sort
PPT
Shell sort
PDF
Insertion Sort
PDF
Análise empírica de algoritmos de ordenação
DOC
Trabalho métodos de ordenação
PDF
Selection Sort
PPT
Shell sort[1]
PDF
métodos ordenação C, bolha, selection sort e insertion sort
Tutorial aed iii 002 - algoritmo de ordenação shellsort
ordenacao shellsort quicksort em C
Bubble Sort
Shell sort
Insertion Sort
Análise empírica de algoritmos de ordenação
Trabalho métodos de ordenação
Selection Sort
Shell sort[1]
métodos ordenação C, bolha, selection sort e insertion sort
Anúncio

Semelhante a Algoritmo Shell Sort (20)

PDF
shellsort.pdf
DOC
Aula3 ordpesq
PDF
7082 texto do artigo-33807-2-10-20180903
PDF
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
PDF
Comparação Experimental de Algoritmos de Ordenação
PDF
Aula 1 - Ordenação Interna - Seleção e Inserção.pdf
PDF
Tutorial aed iii 001 - algoritmo de ordenação shellsort
ODT
Eda trabalho seleção.docx_0
PDF
Cálculo Numérico: Integração Numérica com Bubble Sort
DOCX
2 referencial teorico
PDF
Metodos de ordenação em c#
PDF
Análise de Algoritmos - Recursividade
PDF
Trabalho de algoritmos
PDF
Análise de desempenho de algoritmos de ordenação
PDF
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
PDF
Algoritmos e métodos de Ordenação pt2.pdf
PPT
Técnica de busca - Bubble Sort
DOCX
Aulas de estrutura de dados por Ayrton Yagami
PPSX
Algoritmos de busca
PDF
Tutorial aed iii 003 - algoritmo de ordenação shellsort
shellsort.pdf
Aula3 ordpesq
7082 texto do artigo-33807-2-10-20180903
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Comparação Experimental de Algoritmos de Ordenação
Aula 1 - Ordenação Interna - Seleção e Inserção.pdf
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Eda trabalho seleção.docx_0
Cálculo Numérico: Integração Numérica com Bubble Sort
2 referencial teorico
Metodos de ordenação em c#
Análise de Algoritmos - Recursividade
Trabalho de algoritmos
Análise de desempenho de algoritmos de ordenação
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
Algoritmos e métodos de Ordenação pt2.pdf
Técnica de busca - Bubble Sort
Aulas de estrutura de dados por Ayrton Yagami
Algoritmos de busca
Tutorial aed iii 003 - algoritmo de ordenação shellsort

Mais de Gabriel Albuquerque (11)

PDF
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
PDF
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
PDF
Teoria dos Grafos
PDF
Star Wars e a Cultura da Convergência
PDF
Cultura Empresarial: Definição e Cases
PDF
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
PDF
Tecnologia Bluetooth
PDF
Algoritmos Gulosos - Troco Mínimo
PDF
Programação Dinâmica - Segmento de Soma Máxima
PDF
PDF
OOCSS - Object Oriented CSS
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Teoria dos Grafos
Star Wars e a Cultura da Convergência
Cultura Empresarial: Definição e Cases
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Tecnologia Bluetooth
Algoritmos Gulosos - Troco Mínimo
Programação Dinâmica - Segmento de Soma Máxima
OOCSS - Object Oriented CSS

Último (7)

PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
apresentacao introducao computacao ead.pdf
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Paper_A028_BR_Victor_Enrique_Cavero_Sori (1).pdf
Mapeamento de Objeto para Tabela Relacional
Dos requisitos ao código: como criar código rastreável em PHP
apresentacao introducao computacao ead.pdf
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Evolução em código: algoritmos genéticos com PHP
Curso de Windows 11 resumido na prática.pptx
Paper_A028_BR_Victor_Enrique_Cavero_Sori (1).pdf

Algoritmo Shell Sort

  • 1. Algoritmo Shell Sort Gabriel Ramalho Túlio Lemes Vinicius Rodrigues
  • 2. Dado certo número de elementos, informações ou dados, e a necessidade de termos que ordená-los em uma ordem predefinida, se faz necessária a utilização de algoritmos de ordenação. Dentre as várias razões para se ordenar uma sequência, uma delas é a possibilidade de acessar seus dados de uma maneira mais eficiente. Motivação
  • 3. Questão: Dado um vetor de elementos não ordenados deve- se ordená-los de acordo com uma função de comparação predefinida. Entrada: Vetor de elementos não ordenados: L[n] = {e1, e2, e3, …, en}. Saída: Vetor ordenado. Descrição:
  • 4. Visão Geral ● Dividir o vetor em vetores menores, ordenando-os e fazendo isso novamente para ter um único vetor praticamente ordenado e então trabalhar em cima dele, que seria mais prático e rápido ● O Shell Sort se baseia em uma variável chamada de incremento de sequência, ou incremento de shell, que é dado por h e ao decorrer da execução do algoritmo, é decrementada até 1 ● Utilizando o incremento de shell, o algoritmo compara elementos distantes em um vetor, em vez de comparar os adjacentes
  • 5. Visão Geral ● No algoritmo, a ordenação é realizada em vários passos, usando uma sequência de valores do incremento de shell <h1, h2, h3…hN> onde começando por hN selecionamos apenas os valores que estão hN elementos distantes um do outro, então ordenamos esses elementos com algum algoritmo de ordenação simples como bolha, seleção ou inserção. Deste modo, apenas os elementos selecionados serão ordenados, os outros são todos ignorados.
  • 6. Algoritmo Donald Shell Função ShellSort(A, n) aux, i, j, h = n/2; Enquanto h > 0 i = h; Enquanto i < n aux = A[i] j = i; Enquanto j >= h && aux < A[j - h] A[j] = A[j - h]; j = j - h; A[j] = aux; i = i +1; h = h/2;
  • 11. ● Como escolher valores para h? ○ Existem vários modos de escolher valores para h baseados em estudos de eficiência ○ O método de seleção de valores para h proposto por Donald Shell foi h = n/2 onde n é o número de elementos do vetor, mas já foi provado que sua eficiência é baixa ○ O método de seleção de Donald Knuth, explicado como: h = 3 * h + 1 E a sequência gerada: 1, 4, 13, 40, 121, 364, 1093, 3280…
  • 12. Algoritmo Knuth Função ShellSort(A, n) i, j , h = 1; aux; Enquanto h < n h = h * 3 + 1; Enquanto h > 1 h = (h – 1) / 3; i = h; Enquanto i < n aux = A[i]; j = i – h; Enquanto(j >= 0 && aux < A[j]) A[j + h] = A[j]; j = j – h; A[j + h] = aux; i = i + 1;
  • 13. Prova de Corretude Sendo L uma lista de n elementos, com n >= 0: L[n] = { e0, e1, …, en } Queremos demonstrar que qualquer que seja o valor dos elementos da lista L, através do algoritmo de inserção, a lista L será ordenada de acordo com uma função de comparação predefinida. Para qualquer que seja o valor de h: - sugerido por Shell: n/2, n/4, …, 1 - sugerido por Knuth: …, 40, 13, 4, 1 o último valor de h será sempre 1, logo, para provar a corretude do algoritmo precisamos apenas que para em h = 1 o algoritmo esteja correto.
  • 14. Prova de Corretude Considerando o algoritmo de inserção abaixo: para j = 1 até n key = L[j] i = j - 1 enquanto i >= 0 e compara(L[i], key) L[i + 1] = L[i] i = i + 1 L[i+1] = key Considere que L[0] é um valor já ordenado. Sendo assim, a cada iteração L[j] é colocado na posição correta e nenhum elemento de L[0..j] se move além de j. Logo, quando j = n + 1 então L[n] estará ordenado, como queríamos demonstrar.
  • 15. Complexidade Pior Caso ● Método de seleção de Donald Shell: O(n²) ● Método de seleção de Donald Knuth: O(n^3/2)
  • 16. Conclusão: Vantagens: •  Shell Sort é uma ótima opção para arquivos de tamanho moderado. •  Sua implementação é simples e requer uma quantidade de código pequena. Desvantagens: •  O tempo de execução do algoritmo é sensível à ordem inicial do arquivo. •  O método não é estável.
  • 17. Bibliografia: ● http://cadernogeek.wordpress.com/tag/shell-sort/ ● http://www.decom.ufop.br/toffolo/site_media/uploads/2011- 2/bcc202/slides/19._shellsort.pdf ● http://www.lia.ufc.br/~valdisio/ed/PO2.pdf ● http://www.dsc.ufcg.edu. br/~lbmarinho/slides/atal_2012_1/corretude_2012_1.pdf