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

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

Shell Sort. 2 Conceito Shell sort é uma extensão do insertion sort baseado em: Insertion sort é bastante eficiente quando a entrada está parcialmente.

Apresentações semelhantes


Apresentação em tema: "Shell Sort. 2 Conceito Shell sort é uma extensão do insertion sort baseado em: Insertion sort é bastante eficiente quando a entrada está parcialmente."— Transcrição da apresentação:

1 Shell Sort

2 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 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 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 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 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 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 8 Exemplo de shell sort (3) >

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

10 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 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 h M = 1, h M-1 = h M * 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 12 Programa com Shell Sort (1) De://www.java2s.com/ExampleCode/Collections-Data-Structure/Shellsort.htm 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 13 Programa com Shell Sort (2) public void shellSort() { int inner, outer; long temp; int h = 1; //valor inicial de h while (h 0) // decrementar h, até que h=1 { // classificar por colunas for (outer = h; outer h - 1 && data[inner - h] >= temp) { data[inner] = data[inner - h]; inner -= h; } data[inner] = temp; } h = (h - 1) / 3; // decrementar h } }

14 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. 2 Conceito Shell sort é uma extensão do insertion sort baseado em: Insertion sort é bastante eficiente quando a entrada está parcialmente."

Apresentações semelhantes


Anúncios Google