Shell Sort - PowerPoint PPT Presentation

About This Presentation
Title:

Shell Sort

Description:

Shell Sort Conceito Shell sort uma extens o do insertion sort baseado em: Insertion sort bastante eficiente quando a entrada est parcialmente classificada ... – PowerPoint PPT presentation

Number of Views:136
Avg rating:3.0/5.0
Slides: 15
Provided by: iNHA6
Category:
Tags: collections | java | shell | sort

less

Transcript and Presenter's Notes

Title: Shell Sort


1
Shell Sort
2
Conceito
  • Shell sort é uma extensão do insertion sort
    baseado em
  • Insertion sort é bastante eficiente quando a
    entrada está parcialmente classificada
  • Insertion sort é ineficiente no caso geral pois
    move os valores apenas uma posição a cada vez

3
Descrição (1)
  • A proposta consiste em re-arrumar objetos com
    intervalos maiores que decrescerão até chegar ao
    intervalo 1
  • A etapa final é um verdadeiro Insertion sort
    porém sobre um array de dados quase completamente
    classificado

4
Descrição (2)
  • O processo consiste em
  • Distribuir a seqüência de dados a classificar em
    um array bidimensional
  • Classificar as colunas desse array
  • O processo se repete reduzindo número de colunas
    do array até alcançar o valor 1

5
Descrição (3)
  • Os itens contidos em cada sub-lista não são
    contíguos
  • Se houver 3 sub-listas cada sub-lista será
    composta pelo i-ésimo elemento
  • No caso de 3 sub-listas
  • A primeira conterá os elementos das posições 1,
    4, 7 e assim por diante
  • A segunda conterá os elementos das posições 2, 5,
    8 e assim por diante
  • A terceira conterá os elementos das posições 3,
    6, 9 e assim por diante

6
Exemplo de shell sort (1)
  • Considere-se a seqüência de dados que se deseja
    classificar
  • 3 7 9 0 5 1 6 8 4 2 0 6 1 5 7 3 4 9 8 2
  • Inicia-se distribuindo a seqüência em um
    determinado número de colunas
  • No exemplo serão consideradas 7 colunas
  • Cada coluna é classificada de cima para baixo em
    ordem ascendente
  • A distribuição da esquerda é antes da
    classificação e a da direita depois da
    classificação

7
Exemplo de shell sort (2)
  • 3 7 9 0 5 1 6 3 3 2 0 5 1 5
  • 8 4 2 0 6 1 5 -gt 7 4 4 0 6 1 6
  • 7 3 4 9 8 2 8 7 9 9 8 2
  • A seqüência assim obtida é redistribuída em um
    número menor de colunas, 3 por exemplo, e o
    processo repetido

8
Exemplo de shell sort (3)
  • 3 3 2 0 0 1
  • 0 5 1 1 2 2
  • 5 7 4 3 3 4
  • 4 0 6 -gt 4 5 6
  • 1 6 8 5 6 8
  • 7 9 9 7 7 9
  • 8 2 8 9

9
Exemplo de shell sort (4)
  • Basta agora distribuir em uma coluna e repetir o
    processo uma última vez
  • Para caber em um slide a coluna será exibida
    transposta
  • 0 0 1 1 2 2 3 3 4 4 5 6 5 6 8 7 7
    9 8 9
  • 0 0 1 1 2 2 3 3 4 4 5 5 6 6 8 7 7
    8 9 9

10
Exemplo de shell sort (5)
  • A seqüência de dados não é distribuída em um
    array bidimensional mas mantida em um array
    unidimensional adequadamente indexado

11
Número de colunas
  • Seja h o número de colunas a adotar
  • Para calcular a seqüência de valores de h pode-se
    adotar, por exemplo
  • hM 1, hM-1 hM 3 1
  • O resultado obtido é
  • ..., 1093, 364, 121, 40, 13, 4, 1
  • Antes de iniciar a classificação é preciso
    determinar o valor inicial de h (aproximadamente
    um terço do tamanho do array a classsificar)
  • int h  1 //valor inicial de
    hwhile (h lt len / 3)    h  h  3  1
  •  // (1, 4, 13, 40, 121, ...)

12
Programa com Shell Sort (1)
  • De//www.java2s.com/ExampleCode/Collections-Data-S
    tructure/Shellsort.htm
  • public class ShellSort   private long data
     private int len  public ShellSort(int max)  
       data  new longmax    len  0    publi
    c void insert(long value)    datalen  value 
        len    public void display()     Sys
    tem.out.print("Data")    for (int j  0 j lt le
    n j)      System.out.print(dataj  " ")   
     System.out.println("")  

13
Programa com Shell Sort (2)
  • public void shellSort()     int inner, outer  
      long temp    int h  1 //valor inicial de
    h    while (h lt len / 3)      h  h  3  1 //
     (1, 4, 13, 40, 121, ...)    while (h gt 0) // de
    crementar h, até que h1     // classificar por
    colunas             for (outer  h outer lt len 
    outer)         temp  dataouter        inn
    er  outer        // um sub-passo (por
    exemplo 0, 4, 8)        while (inner gt h - 1  d
    atainner - h gt temp)           datainner  
    datainner - h          inner - h         
           datainner  temp            h  (h - 
    1) / 3 // decrementar h      

14
Programa com Shell Sort (3)
  • public static void main(String args)     int m
    axSize  10    ShellSort arr  new ShellSort(max
    Size)    for (int j  0 j lt maxSize j)   
        long n  (int) (java.lang.Math.random()  99)
          arr.insert(n)        arr.display()   
     arr.shellSort()    arr.display()   // fim
    de main
  • // fim de ShellSort
Write a Comment
User Comments (0)
About PowerShow.com