• Nenhum resultado encontrado

Algoritmos de Ordenação Prof. Tiago Eugenio de Melo

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos de Ordenação Prof. Tiago Eugenio de Melo"

Copied!
224
0
0

Texto

(1)

Algoritmos e Estruturas de Dados II

Algoritmos de Ordenação

Prof. Tiago Eugenio de Melo

tmelo@uea.edu.br www.tiagodemelo.info

(2)

Observações

● As palavras com a fonte Courier indicam as

palavras-reservadas da linguagem de programação.

(3)

Referências

Algorithms in a Nutshell. George T.

Heineman, Gary Pollice, Stanley Selkow. O’Reilly Media, 2009.

Projetos de Algoritmos – com

implementações em Pascal e C. Nivio Ziviani.

2a edição. Thomson, 2005.

(4)

Algoritmos de Ordenação

(5)

Introdução

(6)

Introdução

● Algoritmos de ordenação organizam os

elementos de uma lista em uma ordem (ascendente ou descendente).

(7)

Introdução

● Algoritmos de ordenação organizam os

elementos de uma lista em uma ordem (ascendente ou descendente).

● Ordenação é uma das mais importantes

categorias de algoritmos da Computação.

(8)

Introdução

● Algoritmos de ordenação organizam os

elementos de uma lista em uma ordem (ascendente ou descendente).

● Ordenação é uma das mais importantes

categorias de algoritmos da Computação.

● Frequentemente são usados para diminuir a

complexidade de um problema.

(9)

Introdução

● Algoritmos de ordenação organizam os elementos

de uma lista em uma ordem (ascendente ou descendente).

● Ordenação é uma das mais importantes

categorias de algoritmos da Computação.

● Frequentemente são usados para diminuir a

complexidade de um problema.

● Aplicam-se em problemas de banco de dados ou

de recuperação de informação.

(10)

Classificação dos Algoritmos

(11)

Classificação dos Algoritmos

● Número de comparações

(12)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

(13)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

(14)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

– Ordenação interna

(15)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

– Ordenação interna

● Todos os dados estão em memória principal (RAM).

(16)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

– Ordenação interna

● Todos os dados estão em memória principal (RAM).

– Ordenação externa

(17)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

– Ordenação interna

● Todos os dados estão em memória principal (RAM).

– Ordenação externa

● Memória principal não cabe todos os dados.

(18)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

– Ordenação interna

● Todos os dados estão em memória principal (RAM).

– Ordenação externa

● Memória principal não cabe todos os dados.

● Dados armazenados em memória secundária (disco).

(19)

Classificação dos Algoritmos

● Número de comparações ● Número de trocas

● Localização dos dados

– Ordenação interna

● Todos os dados estão em memória principal (RAM). – Ordenação externa

● Memória principal não cabe todos os dados.

● Dados armazenados em memória secundária (disco).

● Recursão

(20)

Classificação dos Algoritmos

(21)

Classificação dos Algoritmos

● Uso de memória

(22)

Classificação dos Algoritmos

● Uso de memória

In place: ordena sem usar memória adicional ou

usando uma quantidade constante de memória adicional.

(23)

Classificação dos Algoritmos

● Uso de memória

In place: ordena sem usar memória adicional ou

usando uma quantidade constante de memória adicional.

– Alguns métodos precisam duplicar os dados.

(24)

Classificação dos Algoritmos

(25)

Classificação dos Algoritmos

● Adaptabilidade

(26)

Classificação dos Algoritmos

● Adaptabilidade

– Um método é adaptável quando a sequência de

operações realizadas depende da entrada.

(27)

Classificação dos Algoritmos

● Adaptabilidade

– Um método é adaptável quando a sequência de

operações realizadas depende da entrada.

– Um método que sempre realiza as mesmas

operações, independente da entrada, é não adaptável.

(28)

Classificação dos Algoritmos

(29)

Classificação dos Algoritmos

● Estabilidade

– Método é estável se a ordem relativa dos registros

com a mesma chave não se altera após a ordenação.

(30)

Classificação dos Algoritmos

● Estabilidade

– Método é estável se a ordem relativa dos registros

com a mesma chave não se altera após a ordenação.

(31)

Algoritmo da Bolha

(32)

Algoritmo da Bolha

Também conhecido como Bubble Sort.

(33)

Algoritmo da Bolha

Também conhecido como Bubble Sort. ● É o método mais simples de ordenação.

(34)

Algoritmo da Bolha

Também conhecido como Bubble Sort. ● É o método mais simples de ordenação. ● Algoritmo

(35)

Algoritmo da Bolha

Também conhecido como Bubble Sort. ● É o método mais simples de ordenação. ● Algoritmo

– Compara elementos adjacentes.

(36)

Algoritmo da Bolha

Também conhecido como Bubble Sort. ● É o método mais simples de ordenação. ● Algoritmo

– Compara elementos adjacentes.

– Os elementos são trocados, caso não estejam

ordenados.

(37)

Algoritmo da Bolha

Também conhecido como Bubble Sort. ● É o método mais simples de ordenação. ● Algoritmo

– Compara elementos adjacentes.

– Os elementos são trocados, caso não estejam

ordenados.

– Processo é repetido até a lista ficar ordenada.

(38)

Algoritmo da Bolha

(39)

Algoritmo da Bolha

● Exemplo:

(40)

Algoritmo da Bolha

● Exemplo:

(41)

Algoritmo da Bolha

● Exemplo:

● O algoritmo tem complexidade O(n2).

(42)

Algoritmo da Bolha

(43)

Algoritmo da Bolha

● Pontos positivos

(44)

Algoritmo da Bolha

● Pontos positivos

– Algoritmo simples.

(45)

Algoritmo da Bolha

● Pontos positivos

– Algoritmo simples. – Algoritmo estável.

(46)

Algoritmo da Bolha

● Pontos positivos – Algoritmo simples. – Algoritmo estável. ● Pontos negativos 12 / 50

(47)

Algoritmo da Bolha

● Pontos positivos – Algoritmo simples. – Algoritmo estável. ● Pontos negativos – Não adaptável. 12 / 50

(48)

Algoritmo da Bolha

● Pontos positivos – Algoritmo simples. – Algoritmo estável. ● Pontos negativos – Não adaptável.

– Muitas trocas de elementos durante a ordenação.

(49)

Algoritmo de Seleção

(50)

Algoritmo de Seleção

Também conhecido como Selection Sort.

(51)

Algoritmo de Seleção

Também conhecido como Selection Sort.É um algoritmo in place.

(52)

Algoritmo de Seleção

Também conhecido como Selection Sort.É um algoritmo in place.

● Algoritmo:

(53)

Algoritmo de Seleção

Também conhecido como Selection Sort.É um algoritmo in place.

● Algoritmo:

– Achar o maior (ou menor) valor da lista.

(54)

Algoritmo de Seleção

Também conhecido como Selection Sort.É um algoritmo in place.

● Algoritmo:

– Achar o maior (ou menor) valor da lista. – Trocar esse elemento na posição atual.

(55)

Algoritmo de Seleção

Também conhecido como Selection Sort.É um algoritmo in place.

● Algoritmo:

– Achar o maior (ou menor) valor da lista. – Trocar esse elemento na posição atual.

– Repetir o processo até a lista ficar ordenada.

(56)

Algoritmo de Seleção

(57)

Algoritmo de Seleção

● Exemplo

(58)

Algoritmo de Seleção

● Exemplo

(59)

Algoritmo de Seleção

● Exemplo

● O algoritmo tem complexidade O(n2).

(60)

Algoritmo de Seleção

(61)

Algoritmo de Seleção

● Pontos positivos

(62)

Algoritmo de Seleção

● Pontos positivos

– Custo linear no tamanho da entrada para o número

de movimentos de elementos.

(63)

Algoritmo de Seleção

● Pontos positivos

– Custo linear no tamanho da entrada para o número

de movimentos de elementos.

● Pontos negativos

(64)

Algoritmo de Seleção

● Pontos positivos

– Custo linear no tamanho da entrada para o número

de movimentos de elementos.

● Pontos negativos

– Não adaptável.

(65)

Algoritmo de Seleção

● Pontos positivos

– Custo linear no tamanho da entrada para o número

de movimentos de elementos.

● Pontos negativos

– Não adaptável. – Não estável.

(66)

Algoritmo de Inserção

(67)

Algoritmo de Inserção

● A cada iteração, o algoritmo remove um

elemento da lista de entrada e insere esse elemento na posição correta.

(68)

Algoritmo de Inserção

(69)

Algoritmo de Inserção

● Exemplo

(70)

Algoritmo de Inserção

● Exemplo

(71)

Algoritmo de Inserção

● Exemplo

● O algoritmo tem complexidade O(n2).

(72)

Algoritmo de Inserção

(73)

Algoritmo de Inserção

● Características:

(74)

Algoritmo de Inserção

● Características:

– Simples implementação.

(75)

Algoritmo de Inserção

● Características:

– Simples implementação.

A ordenação é realizada in place. Requer apenas

O(1) de espaço extra de memória.

(76)

Algoritmo de Inserção

● Características:

– Simples implementação.

A ordenação é realizada in place. Requer apenas

O(1) de espaço extra de memória.

– Estável.

(77)

Algoritmo de Inserção

● Características:

– Simples implementação.

A ordenação é realizada in place. Requer apenas

O(1) de espaço extra de memória.

– Estável.

– Na prática, é mais eficiente do que o método Bolha

e Seleção.

(78)

Algoritmo de Inserção

● Características:

– Simples implementação.

A ordenação é realizada in place. Requer apenas

O(1) de espaço extra de memória.

– Estável.

– Na prática, é mais eficiente do que o método Bolha e

Seleção.

– Algoritmo usado quando a entrada está praticamente

ordenada ou quando a entrada é pequena.

(79)

Algoritmo de Inserção

(80)

Algoritmo de Inserção

● Pontos positivos

(81)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

(82)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

– É o método a ser utilizado quando a lista está

quase ordenada.

(83)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

– É o método a ser utilizado quando a lista está

quase ordenada.

– É um bom método quando se deseja adicionar

poucos elementos a uma lista ordenada (custo linear).

(84)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

– É o método a ser utilizado quando a lista está

quase ordenada.

– É um bom método quando se deseja adicionar

poucos elementos a uma lista ordenada (custo linear).

– É estável.

(85)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

– É o método a ser utilizado quando a lista está quase

ordenada.

– É um bom método quando se deseja adicionar poucos

elementos a uma lista ordenada (custo linear).

– É estável.

● Pontos negativos

(86)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

– É o método a ser utilizado quando a lista está quase

ordenada.

– É um bom método quando se deseja adicionar poucos

elementos a uma lista ordenada (custo linear).

– É estável.

● Pontos negativos

– Número de comparações tem crescimento quadrático.

(87)

Algoritmo de Inserção

● Pontos positivos

– Adequado para ordenar vetores pequenos.

– É o método a ser utilizado quando a lista está quase

ordenada.

– É um bom método quando se deseja adicionar poucos

elementos a uma lista ordenada (custo linear).

– É estável.

● Pontos negativos

– Número de comparações tem crescimento quadrático. – Alto custo de movimentação de elementos na lista.

(88)

Mergesort

(89)

Mergesort

● Estratégia de divisão e conquista

(90)

Mergesort

● Estratégia de divisão e conquista

● Algoritmo baseado em dois passos:

(91)

Mergesort

● Estratégia de divisão e conquista

● Algoritmo baseado em dois passos:

– Divide a lista de entrada em N sublistas, onde cada

sublista tem 1 elemento não ordenado e N é o número de elementos da lista.

(92)

Mergesort

● Estratégia de divisão e conquista

● Algoritmo baseado em dois passos:

– Divide a lista de entrada em N sublistas, onde cada

sublista tem 1 elemento não ordenado e N é o número de elementos da lista.

Repetidamente junta (merge) as sublistas para ir

produzindo novas sublistas ordenadas até que

todos os elementos sejam agrupados (merge) em uma única lista ordenada.

(93)

Mergesort

(94)

Mergesort

● Exemplo

(95)

Mergesort

● Exemplo

(96)

Quicksort

(97)

Quicksort

● É outro algoritmo baseado na estratégia de

divisão e conquista.

(98)

Quicksort

● É outro algoritmo baseado na estratégia de

divisão e conquista.

● Apesar dele ser um pouco mais complicado, na

maioria das implementações ele é mais eficiente do que o Mergesort e raramente alcança o pior caso de O(n2).

(99)

Quicksort

(100)

Quicksort

● Algoritmo

(101)

Quicksort

● Algoritmo

– Seleciona-se um elemento da lista chamado de

pivot.

(102)

Quicksort

● Algoritmo

– Seleciona-se um elemento da lista chamado de

pivot.

– Executa-se a operação de partição

(103)

Quicksort

● Algoritmo

– Seleciona-se um elemento da lista chamado de

pivot.

– Executa-se a operação de partição

Os elementos menores que o pivot ficarão a sua

esquerda.

(104)

Quicksort

● Algoritmo

– Seleciona-se um elemento da lista chamado de

pivot.

– Executa-se a operação de partição

Os elementos menores que o pivot ficarão a sua

esquerda.

Os elementos maiores que o pivot ficarão a sua direita.

(105)

Quicksort

● Algoritmo

Seleciona-se um elemento da lista chamado de pivot. – Executa-se a operação de partição

Os elementos menores que o pivot ficarão a sua esquerda.

Os elementos maiores que o pivot ficarão a sua direita.

– De modo recursivo, aplica-se os passos anteriores

separadamente para cada sublista onde o último

pivot é o elemento central.

(106)

Quicksort

● Exemplo

(107)

Quicksort

● Exemplo

(108)

ShellSort

(109)

ShellSort

● Proposto por Donald Shell em 1959.

(110)

ShellSort

● Proposto por Donald Shell em 1959.

● É uma extensão do algoritmo de ordenação por

inserção.

(111)

ShellSort

● Proposto por Donald Shell em 1959.

● É uma extensão do algoritmo de ordenação por

inserção.

● Ordenação por inserção só troca elementos

adjacentes para determinar o ponto de inserção.

(112)

ShellSort

● Proposto por Donald Shell em 1959.

● É uma extensão do algoritmo de ordenação por

inserção.

● Ordenação por inserção só troca elementos

adjacentes para determinar o ponto de inserção.

● O método ShellSort permite fazer trocas de

elementos distantes.

(113)

ShellSort

(114)

ShellSort

● Algoritmo

(115)

ShellSort

● Algoritmo

– Os conjuntos de elementos separados de h

posições são ordenados.

(116)

ShellSort

● Algoritmo

– Os conjuntos de elementos separados de h

posições são ordenados.

● O elemento na posição x é comparado (e trocado) com o

elemento da posição x-h.

(117)

ShellSort

● Algoritmo

– Os conjuntos de elementos separados de h

posições são ordenados.

● O elemento na posição x é comparado (e trocado) com o

elemento da posição x-h.

● A lista resultante é composta de h segmentos ordenados

e entrelaçados.

(118)

ShellSort

● Algoritmo

– Os conjuntos de elementos separados de h

posições são ordenados.

● O elemento na posição x é comparado (e trocado) com o

elemento da posição x-h.

● A lista resultante é composta de h segmentos ordenados

e entrelaçados.

– A lista é dita estar h-ordenada.

(119)

ShellSort

● Algoritmo

– Os conjuntos de elementos separados de h posições

são ordenados.

● O elemento na posição x é comparado (e trocado) com o

elemento da posição x-h.

● A lista resultante é composta de h segmentos ordenados e

entrelaçados.

– A lista é dita estar h-ordenada.

– Quando h = 1 o algoritmo é equivalente ao método

de inserção.

(120)

ShellSort

● Exemplo: a1 a2 a3 a4 a5 a6 a7 a8 a9 a0 a11 a12 Entrada 62 83 18 53 07 17 95 86 47 69 25 28 H = 5 17 28 18 47 07 25 83 86 53 69 62 95 H = 3 17 07 18 47 28 25 69 62 53 83 86 95 H = 1 07 17 18 25 28 47 53 62 69 83 86 95 27 / 50

(121)

ShellSort

(122)

ShellSort

(123)

ShellSort

● Escolha da distância de salto (h)

(124)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta (h = 1 é a ordenação por inserção).

(125)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo.

(126)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo. – Sequência para h:

(127)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo. – Sequência para h:

● h(s) = 1, para s = 1

(128)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo. – Sequência para h:

● h(s) = 1, para s = 1

● h(s) = 3h(s-1) + 1, para s > 1

(129)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante a

ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo. – Sequência para h:

● h(s) = 1, para s = 1

● h(s) = 3h(s-1) + 1, para s > 1

● A sequência corresponde a 1, 4, 13, 40, 121, 364, 1.093…

(130)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante a

ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo. – Sequência para h:

● h(s) = 1, para s = 1

● h(s) = 3h(s-1) + 1, para s > 1

● A sequência corresponde a 1, 4, 13, 40, 121, 364, 1.093…

● Knuth mostrou experimentalmente que essa sequência é difícil

de ser batida por mais de 20% de eficiência.

(131)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante a

ordenação correta (h = 1 é a ordenação por inserção).

– Forte impacto no desempenho do algoritmo. – Sequência para h:

● h(s) = 1, para s = 1

● h(s) = 3h(s-1) + 1, para s > 1

● A sequência corresponde a 1, 4, 13, 40, 121, 364, 1.093…

● Knuth mostrou experimentalmente que essa sequência é difícil de

ser batida por mais de 20% de eficiência.

● Outras escolhas são possíveis.

(132)

ShellSort

(133)

ShellSort

● Escolha da distância de salto (h)

(134)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta.

(135)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta.

● h = 1 é ordenação por inserção.

(136)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta.

● h = 1 é ordenação por inserção.

– Forte impacto no desempenho do algoritmo.

(137)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta.

● h = 1 é ordenação por inserção.

– Forte impacto no desempenho do algoritmo. – Exemplo de sequência ruim: 1, 2, 4, 8, 16…

(138)

ShellSort

● Escolha da distância de salto (h)

– Qualquer sequência terminando com h = 1 garante

a ordenação correta.

● h = 1 é ordenação por inserção.

– Forte impacto no desempenho do algoritmo. – Exemplo de sequência ruim: 1, 2, 4, 8, 16…

● Não compara elementos em posições pares com

elementos em posições ímpares até a última iteração.

(139)

ShellSort

(140)

ShellSort

● A complexidade do algoritmo ainda não é

conhecida.

(141)

ShellSort

● A complexidade do algoritmo ainda não é

conhecida.

● Ninguém ainda foi capaz de encontrar uma

fórmula fechada para sua função de complexidade.

(142)

ShellSort

● A complexidade do algoritmo ainda não é

conhecida.

● Ninguém ainda foi capaz de encontrar uma

fórmula fechada para sua função de complexidade.

● A sua análise ainda contém alguns problemas

matemáticos difíceis. Exemplo: escolher a sequência de incrementos.

(143)

ShellSort

● A complexidade do algoritmo ainda não é

conhecida.

● Ninguém ainda foi capaz de encontrar uma fórmula

fechada para sua função de complexidade.

● A sua análise ainda contém alguns problemas

matemáticos difíceis. Exemplo: escolher a sequência de incrementos.

● O que se sabe é que cada incremento não deve

ser múltiplo do anterior.

(144)

ShellSort

(145)

ShellSort

● Conjecturas referentes ao número de

comparações para a sequência de Knuth:

(146)

ShellSort

● Conjecturas referentes ao número de

comparações para a sequência de Knuth:

– Conjectura 1: C(n) = O(n1,25)

(147)

ShellSort

● Conjecturas referentes ao número de

comparações para a sequência de Knuth:

– Conjectura 1: C(n) = O(n1,25)

– Conjectura 2: C(n) = O(n (ln n)2)

(148)

ShellSort

(149)

ShellSort

● Pontos positivos

(150)

ShellSort

● Pontos positivos

– É uma boa opção para arquivos de tamanhos

moderados.

(151)

ShellSort

● Pontos positivos

– É uma boa opção para arquivos de tamanhos

moderados.

– Implementação simples e requer uma quantidade

de código pequena.

(152)

ShellSort

● Pontos positivos

– É uma boa opção para arquivos de tamanhos

moderados.

– Implementação simples e requer uma quantidade

de código pequena.

● Pontos negativos

(153)

ShellSort

● Pontos positivos

– É uma boa opção para arquivos de tamanhos

moderados.

– Implementação simples e requer uma quantidade

de código pequena.

● Pontos negativos

– O tempo de execução do algoritmo é sensível à

ordem inicial do arquivo.

(154)

ShellSort

● Pontos positivos

– É uma boa opção para arquivos de tamanhos

moderados.

– Implementação simples e requer uma quantidade de

código pequena.

● Pontos negativos

– O tempo de execução do algoritmo é sensível à

ordem inicial do arquivo.

– O método não é estável.

(155)

Counting Sort

(156)

Counting Sort

● É um algoritmo de ordenação que não

necessita da operação de comparação entre os elementos.

(157)

Counting Sort

● É um algoritmo de ordenação que não

necessita da operação de comparação entre os elementos.

● Por isso, é considerado como algoritmo de

ordenação inteira (integer sorting algorithm).

(158)

Counting Sort

● É um algoritmo de ordenação que não

necessita da operação de comparação entre os elementos.

● Por isso, é considerado como algoritmo de

ordenação inteira (integer sorting algorithm).

● Pode ser usado para ordenar uma lista de

elementos cujos valores estão num intervalo pré-definido [0,k).

(159)

Counting Sort

● É um algoritmo de ordenação que não necessita da operação de comparação entre os elementos. ● Por isso, é considerado como algoritmo de

ordenação inteira (integer sorting algorithm). ● Pode ser usado para ordenar uma lista de

elementos cujos valores estão num intervalo pré-definido [0,k).

● É um algoritmo de ordenação estável.

(160)

Counting Sort

● Exemplo

(161)

Counting Sort

● Exemplo

(162)

Counting Sort

(163)

Counting Sort

● Algoritmo

(164)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N.

(165)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N. – Passos:

(166)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N. – Passos:

● Inicializa-se uma lista Aux[] com 0s, onde o tamanho

dessa lista deve ser >= max (A[]).

(167)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N. – Passos:

● Inicializa-se uma lista Aux[] com 0s, onde o tamanho

dessa lista deve ser >= max (A[]).

● Percorra A e armazene a quantidade de ocorrências de

cada elemento de A em uma posição apropriada de Aux.

(168)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N. – Passos:

● Inicializa-se uma lista Aux[] com 0s, onde o tamanho

dessa lista deve ser >= max (A[]).

● Percorra A e armazene a quantidade de ocorrências de

cada elemento de A em uma posição apropriada de Aux.

● Inicializa-se sortedA[] vazio.

(169)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N.

– Passos:

● Inicializa-se uma lista Aux[] com 0s, onde o tamanho dessa

lista deve ser >= max (A[]).

● Percorra A e armazene a quantidade de ocorrências de cada

elemento de A em uma posição apropriada de Aux.

● Inicializa-se sortedA[] vazio.

● Percorra a lista Aux[ ] e copie i em sortedA para

Aux[i] número de vezes, onde 0 <= i <= max(A[]).

(170)

Counting Sort

● Algoritmo

– Ordenar uma lista A de tamanho N. – Passos:

● Inicializa-se uma lista Aux[] com 0s, onde o tamanho dessa lista deve

ser >= max (A[]).

● Percorra A e armazene a quantidade de ocorrências de cada elemento de

A em uma posição apropriada de Aux.

● Inicializa-se sortedA[] vazio.

● Percorra a lista Aux[ ] e copie i em sortedA para Aux[i] número de

vezes, onde 0 <= i <= max(A[]).

– A lista A[ ] somente pode ser ordenada por esse algoritmo se o

valor máximo de A é menor do que o tamanho máximo de Aux[].

(171)

Counting Sort

(172)

Counting Sort

● Complexidade

(173)

Counting Sort

● Complexidade

– A lista A[] é percorrida no tempo de O(N).

(174)

Counting Sort

● Complexidade

– A lista A[] é percorrida no tempo de O(N). – A lista Aux[] é percorrida no tempo de O(k).

(175)

Counting Sort

● Complexidade

– A lista A[] é percorrida no tempo de O(N). – A lista Aux[] é percorrida no tempo de O(k). – Portanto, o tempo médio é O(N + k).

(176)

Bucket Sort

(177)

Bucket Sort

Também conhecido como bin sort.

(178)

Bucket Sort

Também conhecido como bin sort.

● Supõe que os elementos da entrada estão

distribuídos.

(179)

Bucket Sort

Também conhecido como bin sort.

● Supõe que os elementos da entrada estão

distribuídos.

● A ideia é dividir os elementos em segmentos de

mesmo tamanho (buckets).

(180)

Bucket Sort

Também conhecido como bin sort.

● Supõe que os elementos da entrada estão

distribuídos.

● A ideia é dividir os elementos em segmentos de

mesmo tamanho (buckets).

● Espera-se que o número de elementos seja o

mesmo em todos os buckets (segmentos).

(181)

Bucket Sort

Também conhecido como bin sort.

● Supõe que os elementos da entrada estão distribuídos.

● A ideia é dividir os elementos em segmentos de

mesmo tamanho (buckets).

● Espera-se que o número de elementos seja o mesmo

em todos os buckets (segmentos).

● Em seguida, os elementos são ordenados por um

método qualquer.

(182)

Bucket Sort

Também conhecido como bin sort.

● Supõe que os elementos da entrada estão distribuídos.

● A ideia é dividir os elementos em segmentos de mesmo

tamanho (buckets).

● Espera-se que o número de elementos seja o mesmo

em todos os buckets (segmentos).

● Em seguida, os elementos são ordenados por um

método qualquer.

● Depois os elementos são concatenados.

(183)

Bucket Sort

(184)

Bucket Sort

● Exemplo:

(185)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

(186)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

(187)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

(188)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

12

(189)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 12

(190)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 12 23

(191)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 12 23

(192)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 23

(193)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 23 28

(194)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 11 23 28

(195)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 11 23 28 26

(196)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 11 15 23 28 26

(197)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 11 15 23 28 26

(198)

Bucket Sort

● Exemplo:

12 7 23 5 8 28 11 26 15

7 5 8 12 11 15 23 28 26

(199)

Bucket Sort

● Exemplo: 12 7 23 5 8 28 11 26 15 7 5 8 12 11 15 23 28 26 5 7 8 39 / 50

(200)

Bucket Sort

● Exemplo: 12 7 23 5 8 28 11 26 15 7 5 8 12 11 15 23 28 26 5 7 8 11 12 15 39 / 50

Referências

Documentos relacionados

inserir mais elementos na fila, mesmo quando ela não está cheia, as referências primeiro e último circundam até o início do vetor,. resultando numa

- Entender o funcionamento de dois algoritmos simples de ordenação: selection sort e bubble sort; - Saber implementar estes dois algoritmos em C/C++ para ordenar uma tabela

• “A  idéia  era  construir  um  computador  para  realizar  vários  tipos  de  cálculos  de  artilharia  para  ajudar  as  tropas  aliadas  durante  a  II 

Slides adaptados dos slides do livro texto (Ziviani) e dos slides de aula dos professores Davi Menotti (DECOM/UFOP) e Antônio Alfredo Ferreira Loureiro (DCC/UFMG)...

● As opções restrict e cascade estão reservadas para futuras opções

Escreva uma query para mostrar o nome do empregado e data de contratação para todos os empregados do departamento do Blake. Crie uma query para mostrar o número e nome dos

Se a luz de advertência não acender inicial- mente quando a chave for girada para “ON”, ou se a luz de advertência permane- cer acesa, solicite a um concessionário Yamaha

O comparativo da participação dos veículos em acidentes de trânsito consiste na diferença percentual entre os anos de 2011 e 2010. Destaca-se a participação da