A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Shell Sort.

Apresentações semelhantes


Apresentação em tema: "Shell Sort."— Transcrição da apresentação:

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 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)
> 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)
>

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

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 h while (h <= len / 3)     h = h * 3 + 1;  // (1, 4, 13, 40, 121, ...)

12 Programa com Shell Sort (1)
De:// public class ShellSort {   private long[] data;  private int len;   public ShellSort(int max) {     data = new long[max];     len = 0;   }   public void insert(long value){     data[len] = value;      len++;   }   public void display() {     System.out.print("Data:");     for (int j = 0; j < len; j++)       System.out.print(data[j] + " ");     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 <= len / 3)       h = h * 3 + 1; // (1, 4, 13, 40, 121, ...)     while (h > 0) // decrementar h, até que h=1     { // classificar por colunas              for (outer = h; outer < len; outer++) {         temp = data[outer];         inner = outer;         // um sub-passo (por exemplo 0, 4, 8)         while (inner > h - 1 && data[inner - h] >= temp) {           data[inner] = data[inner - h];           inner -= h;         }         data[inner] = temp;       }       h = (h - 1) / 3; // decrementar h     }   }

14 Programa com Shell Sort (3)
public static void main(String[] args) {     int maxSize = 10;     ShellSort arr = new ShellSort(maxSize);     for (int j = 0; j < 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


Carregar ppt "Shell Sort."

Apresentações semelhantes


Anúncios Google