SlideShare a Scribd company logo
1 of 17
Download to read offline
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

More Related Content

What's hot

Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Leinylson Fontinele
 
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Leinylson Fontinele
 
Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Pacc UAB
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Normalização - Banco de Dados
Normalização - Banco de DadosNormalização - Banco de Dados
Normalização - Banco de DadosRoberto Grande
 
Aula 1 estruturas de controlo (final)
Aula 1   estruturas de controlo (final)Aula 1   estruturas de controlo (final)
Aula 1 estruturas de controlo (final)mestradopeci2012
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalizaçãoTicianne Darin
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaDaniel Arndt Alves
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaElaine Cecília Gatto
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
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
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 

What's hot (20)

Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
Algoritmos - Procedimentos
Algoritmos - ProcedimentosAlgoritmos - Procedimentos
Algoritmos - Procedimentos
 
Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1Aula 5 - Estruturas de seleção simples e composta - parte 1
Aula 5 - Estruturas de seleção simples e composta - parte 1
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Normalização - Banco de Dados
Normalização - Banco de DadosNormalização - Banco de Dados
Normalização - Banco de Dados
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Aula 1 estruturas de controlo (final)
Aula 1   estruturas de controlo (final)Aula 1   estruturas de controlo (final)
Aula 1 estruturas de controlo (final)
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalização
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da Disciplina
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista Encadeada
 
6 estruturas de dados heterogêneas
6  estruturas de dados heterogêneas6  estruturas de dados heterogêneas
6 estruturas de dados heterogêneas
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
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.
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 

Viewers also liked

Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsortFlávio Freitas
 
ordenacao shellsort quicksort em C
ordenacao shellsort quicksort em Cordenacao shellsort quicksort em C
ordenacao shellsort quicksort em CAlessandro Trevisan
 
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoOrlando Junior
 
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
 
métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortAlessandro Trevisan
 

Viewers also liked (8)

Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsort
 
ordenacao shellsort quicksort em C
ordenacao shellsort quicksort em Cordenacao shellsort quicksort em C
ordenacao shellsort quicksort em C
 
Shell sort
Shell sortShell sort
Shell sort
 
Insertion Sort
Insertion SortInsertion Sort
Insertion Sort
 
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Shell sort[1]
Shell sort[1]Shell sort[1]
Shell sort[1]
 
métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sort
 

Similar to Shell Sort em

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
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Tutorial aed iii 003 - algoritmo de ordenação shellsort
Tutorial aed iii   003 - algoritmo de ordenação shellsortTutorial aed iii   003 - algoritmo de ordenação shellsort
Tutorial aed iii 003 - algoritmo de ordenação shellsortFlávio Freitas
 
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Tutorial aed iii   009 - algoritmo de ordenação heapsortTutorial aed iii   009 - algoritmo de ordenação heapsort
Tutorial aed iii 009 - algoritmo de ordenação heapsortFlávio Freitas
 
Tutorial aed iii 006 - algoritmo de ordenação quicksort
Tutorial aed iii   006 - algoritmo de ordenação quicksortTutorial aed iii   006 - algoritmo de ordenação quicksort
Tutorial aed iii 006 - algoritmo de ordenação quicksortFlávio Freitas
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NACloves da Rocha
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsortFlávio Freitas
 
EDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfEDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfSimoneSantos16595
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 

Similar to Shell Sort em (17)

shellsort.pdf
shellsort.pdfshellsort.pdf
shellsort.pdf
 
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)
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
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
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
Tutorial aed iii 009 - algoritmo de ordenação heapsort
Tutorial aed iii   009 - algoritmo de ordenação heapsortTutorial aed iii   009 - algoritmo de ordenação heapsort
Tutorial aed iii 009 - algoritmo de ordenação heapsort
 
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
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
 
Python
PythonPython
Python
 
Tutorial aed iii 008 - algoritmo de ordenação heapsort
Tutorial aed iii   008 - algoritmo de ordenação heapsortTutorial aed iii   008 - algoritmo de ordenação heapsort
Tutorial aed iii 008 - algoritmo de ordenação heapsort
 
Aula 21
Aula 21Aula 21
Aula 21
 
EDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfEDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdf
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 

More from Gabriel Albuquerque

Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...Gabriel Albuquerque
 
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Gabriel Albuquerque
 
Star Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaStar Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaGabriel Albuquerque
 
Cultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesCultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesGabriel Albuquerque
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoGabriel Albuquerque
 
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
 

More from Gabriel Albuquerque (11)

Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
 
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 
Star Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaStar Wars e a Cultura da Convergência
Star Wars e a Cultura da Convergência
 
Cultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesCultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e Cases
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Tecnologia Bluetooth
Tecnologia BluetoothTecnologia Bluetooth
Tecnologia Bluetooth
 
Algoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco MínimoAlgoritmos Gulosos - Troco Mínimo
Algoritmos Gulosos - Troco Mínimo
 
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
 
WordPress
WordPressWordPress
WordPress
 
OOCSS - Object Oriented CSS
OOCSS - Object Oriented CSSOOCSS - Object Oriented CSS
OOCSS - Object Oriented CSS
 

Shell Sort em

  • 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