Trabalho ShellSort

12.825 visualizações

Publicada em

Trabalho sobre o algoritmo de ordenação Shell Sort

0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
12.825
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
308
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Trabalho ShellSort

  1. 1. Shellsort<br />Anderson Zardo | Jean Carlo Soares<br />
  2. 2. Criado por Donald Shell (daí o nome Shell) em 1959, publicado pela Universidade de Cincinnati.<br />Como surgiu?<br />
  3. 3. Shellsort é derivado do Algoritmo de Inserção.<br />Inserção apenas faz trocas adjacentes<br />Pior caso: fazer n-1 trocas<br />Já O Shell faz trocas a uma certa distância (que diminui a cada passada)<br />Levar, mais rápido, para o ponto correto<br />Como funciona?<br />
  4. 4. Primeiro compara elementos separados por “h” posições e os rearranja. Após progressivamente, vai diminuindo a distância de comparação (h) até que h=1 (correspondente ao algorítmo de inserção).<br />Como funciona?<br />
  5. 5. Exemplo<br />O R D E N A<br />h = 4<br />h = 2<br />h = 1<br />
  6. 6. Funcionamento<br />R<br />N<br />A<br />D<br />E<br />O<br />R<br />D<br />A<br />N<br />E<br />O<br />R<br />A<br />D<br />E<br />N<br />O<br />6<br />2<br />3<br />4<br />5<br />1<br />A<br />O<br />R<br />D<br />E<br />N<br />h = 4<br />h = 2<br />h = 1<br />Vetor Ordenado<br />
  7. 7. Na primeira passada (h=4), o item O é comparado com N (posições 1 e 5) e trocados. O item R é a seguir comparado e trocado com A (posições 2 e 6)<br />Na segunda passada (h=2), N, D e O, nas posições 1, 3 e 5 são rearrumados para resultar em D, N e O nestas mesmas posições; da mesma forma, A, E e R, nas posições 2, 4 e 6 são comparados e mantidos nos seus lugares<br />A última passada (h=1) corresponde ao algoritmo de inserção, mas apenas trocas locais serão executadas.<br />Entendendo<br />
  8. 8. Ninguemdescobriuatéhoje a sequenciaperfeitaparautilizaçãonestecaso, váriasforamestudadas.<br /><ul><li>Os melhoresresultadosforamobtidosusando a sequência de Knuth:(1, 4, 13, 40, 121, 364, 1093)</li></ul>Comece com h = 1<br />Obtenhaumasequencia de númerosusandoh = 3*h + 1<br />1, 4, 13, 40, 121, 364, 1093<br />Pare quandoh for maiorque o tamanho do array e use o últimonumeroobtido.<br />Para se obter a sequenciaemordemdecrescenteparaaplicaraoalgoritmo, use a fórmulainversaaonumeroobtido:h = (h – 1) / 3<br />Como Obter H:<br />
  9. 9. Velocidade: em sequencias moderadas é mais rápido que outros métodos, mas o método da Inserção é o mais interessante para arquivos pequenos (até 20 elementos). Caso a ordenação inicial da sequência seja decrescente ou aleatória, a ordem de grandeza permanece praticamente a mesma.<br />Aplicação: O método Shellsort é o escolhido pela maioria das aplicações por ser muito eficiente para arquivos de até 10000 registros, Implementação simples e quantidade pequena de código, Porém não é um método estável.<br />Comparando à outros médotos<br />
  10. 10. voidshellSort(int * vet, intsize) { <br />int i , j , value;<br />intgap = 1;<br /> do {<br />gap = 3*gap+1;<br /> } while(gap < size);<br /> do {<br />gap /= 3;<br /> for(i = gap; i < size; i++) {<br />value =vet[i];<br /> j = i - gap;<br />while (j >= 0 && value < vet[j]) {<br />vet [j + gap] =vet[j];<br /> j -= gap;<br /> }<br />vet [j + gap] = value;<br /> }<br /> } while ( gap > 1);<br />}<br />Código de Exemplo:<br />
  11. 11. voidshellsort (int x[], int limite) {<br />int i, j, t, h;<br /> limite--;<br /> h = 1;<br /> do {<br /> h = 3 * h + 1;<br /> } while (h < limite);<br />while (h > 0) {<br /> for (i = h; i <= limite; i++) {<br /> t = x[i];<br /> for (j = i - h; ((j >= 0) && (x[j] > t)); j = j - h)<br /> x[j + h] = x[j];<br /> x[j + h] = t;<br /> }<br /> h /= 3;<br /> }<br />}<br />Código de Exemplo II:<br />

×