SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Introdução ao
Ordenação
JQuery e AJAX
Prof: Sérgio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Introdução
Processo de organizar ítens em ordem (de)crescente, segundo algum critério.
Também chamado de classificaçao.
Aplicações que utilizam-se de dados classificados
● Teste de unicidade: verifica se todos os elementos de uma coleção são
distintos.
● Remoção de duplicatas: remove eventuais duplicatas de uma coleção.
● Busca: conforme foi visto, operações de busca são bastante facilitadas
quando os dados são ordenados.
● Encontrar o i-ésimo maior (ou menor) elemento de uma coleção
● Contagem de freqüência (moda): encontra o elemento que ocorre com
mais freqüência numa coleção.
● Encontrar a união ou a interseção de dois conjuntos.

Fonte: http://www.joinville.udesc.br/portal/professores/parra/materiais/cap9_classificacao.ppt
Introdução
Antes de prosseguimos, considere as seguintes definições.
Define-se um tabela de tamanho n como uma seqüência de n
itens:
r1, r2, ..., rn chamados de registros
Uma chave ki é associada com cada registro ri.
A chave é usualmente (mas nem sempre) um campo do registro.
struct Item{
int chave;
...
}
Principais características
Um método de ordenação é instável caso a ordem relativa dos
itens com chaves iguais é alterada durante o processo de
ordenação ou estável caso contrário.
Uma lista
ordenada
previamente pelo
horário

Agora a mesma
lista ordenada
por destino,
mantendo a
ordenação por
horários
Principais características
Ordenação interna o conjunto de registros cabe todo em na
memória principal, ou externa caso parte dos dados estejam em
memória auxiliar.

Classificação local: realização sobre a mesma área física onde se
encontram as chaves. Não usa memória adicional (in-loco)
ANÁLISE DE EFICIÊNCIA
A eficiência de tempo é calculada pelo número de operações
críticas efetuadas.
● comparação entre chaves;
● movimentação de registros ou de ponteiros para registros;
● troca de dois registros.
Para determinadas instâncias de um dado problema, alguns
algoritmos podem ser beneficiados em algumas dessas operações:
● Exemplo: menor número de trocas e mesmo número de
comparações.
Estratégias
Por troca: são baseados na troca de posição dos dados, se o segundo
elemento é menor do que o primeiro, de forma a ordená-los.
● Exemplos: BubbleSort (Bolha) e QuickSort

Por seleção: parte do princípio de realizar o isolamento de elementos
para posições ordenadas.
● Exemplos: selection sort e heap sort
Por inserção: baseiam-se no deslocamento de elementos da estrutura
frente a um elemento de busca.
Por intercalação, criar uma seqüência ordenada a partir de duas outras
também ordenadas. Esse método é conhecido também como mistura
ou merge em inglês.
Simples - Eficientes
Medidas de complexidade levam em conta:
● O número de comparação entre as chaves
● O número de trocas entre os itens
São classificados em dois tipos:
Métodos Simples: mais recomendados para conjuntos pequenos
de dados. Usam mais comparações, mas produzem códigos
menores e mais simples;
Métodos Eficientes ou Sofisticados: adequados para conjuntos
maiores de dados. Usam menos comparações, porém produzem
códigos mais complexos e com muitos detalhes.
Simples - Eficientes

Ordenação por Seleção (Selection Sort)
Ordenação por Inserção (Insertion Sort)

Métodos
Simples

Ordenação por Seleção e Troca (Bubble Sort)
Ordenação por Inserção através de incrementos
decrescentes (ShellSort)
Ordenação por Particionamento (QuickSort)
Ordenação de Árvores (HeapSort)

Métodos
Eficientes
Métodos Simples
Ordenação por Seleção (Selection Sort)
Ordenação por Inserção (Insertion Sort)
Ordenação por Seleção e Troca (Bubble Sort)
Ordenação por Seleção
A cada passo, seleciona o maior (ou menor), e colocálo na posição correta.
Ordenação por Seleção - Exemplo

1

2

3

4

5

6

Chaves Iniciais:

O

R

D

E

N

A

i=1:

A

R

D

E

N

O

i=2:

A

D

R

E

N

O

i=3:

A

D

E

R

N

O

i=4:

A

D

E

N

R

O

i=5:

A

D

E

N

O

R
Ordenação por Seleção - Código

SelectionSort(A)
1 n <- tamanho[A]
2 para I <- 1 até N-1 faça
3 J <- indiceDoMenorValor (A,i,n)
4 troque A[i] com A[J]
5 // A[1..i] os menores números (1 até i) em ordem
6 fim para;
7 fim procedimento
Ordenação por Seleção Atividade
Suponha que se deseja classificar crescentemente o
vetor abaixo utilizando o método SelectionSort:

9 25 10 18 5 7 15 3
Simule as iterações necessárias para a classificação.
Quantas operações de comparações foram realizadas?
Bubble Sort (método da bolha)
Princípio:
● As chaves Item[1].Chave e Item[2].Chave são comparadas e
trocadas se estiverem fora de ordem;
● Repete-se o processo de comparação e troca com Item[2] e
Item[3], Item[3] e Item[4], ...
Por que Bolha?
Se o vetor a ser ordenado for colocado na vertical, com Item[n] em
cima e Item[1] embaixo, durante cada passo o menor elemento
“sobe” até encontrar um elemento maior ainda, como se uma
bolha subisse dentro de um tubo de acordo com sua densidade
Bubble Sort (método da bolha)
i=1

i=2

i=3

i=4

i=5

i=6

i=7

i=8

44

06

06

06

06

06

06

06

55

44

12

12

12

12

12

12

12

55

44

18

18

18

18

18

42

12

55

44

42

42

42

42

94

42

18

55

44

44

44

44

18

94

42

42

55

55

55

55

06

18

94

67

67

67

67

67

67

67

67

94

94

94

94

94

Chaves
Iniciais
Bubble Sort (método da bolha)
Note que no exemplo, as três últimas iterações não
afetam a ordem do vetor; assim o algoritmo pode ser
melhorado!
Técnica óbvia: manter uma indicação para saber se
houve ou não troca na última iteração: se não houve,
o vetor já está ordenado
Bubble Sort (método da bolha)
Existem várias variações de acordo com a ordem
desejada:
“Sobe” os menores valores em direção ao final do vetor
“Sobe” os maiores valores em direção ao final do vetor
“desce” os menores valores em direção ao inicio do vetor
“desce” os maiores valores em direção ao inicio do vetor
Bubble Sort (método da bolha)

BubbleSort(A)
1 n <- tamanho[A]
2 para I <- 1 até N faça
3 Para J <- N até i-1 faça {contador decrescente}
4 Se A[J] < A[J-1] então
5 troque A[i] com A[J]
6 fim se
7 fim para;
8 fim procedimento
Bubble Sort (método da bolha)
Suponha que se deseja classificar crescentemente o vetor
abaixo utilizando o método BubbleSort:
9 25 10 18 5 7 15 3
Simule as iterações necessárias para a classificação.
Quantas operações de comparações foram realizadas?
Ordenação por inserção

7
7

5 7

5/23/2011
Ordenação por inserção
3 5 7

3 5 7

8

3 5 6 7

8
Ordenação por inserção
Procedimento
Os elementos são divididos em uma seqüência de destino a1, ..., ai-1
e em uma seqüência fonte ai, ..., an.
Em cada passo, a partir de i =2, o i-ésimo item da seqüência fonte é
retirado e transferido para a seqüência destino sendo inserido na
posição adequada
Ordenação por inserção
1

2

3

4

5

6

O

R

D

E

N

A

i=2

O

R

D

E

N

A

i=3

O

R

D

E

N

A

i=4

D
O

O

R

E

N

A

i=5

D

E

O

R

N

A

i=6

D

E

N

O

R

A

Res.:

A

D

E

N

O

R

Chaves Iniciais
Ordenação por inserção
Suponha que se deseja classificar crescentemente o
vetor abaixo utilizando o método Insertion Sort:
9 25 10 18 5 7 15 3
Simule as iterações necessárias para a classificação.
Quantas operações de comparações foram
realizadas?
Métodos Eficiente
QuickSort
MergeSort
ShellSort
QuickSort
Baseia-se em um padrão de projeto fundamental para solução de
problemas conhecida como Divisão e Conquista (Divide-andConquer).
Segundo Goodrich, o padrão pode ser descrito, de maneira geral,
como sendo composto de 3 fases:
● Divisão: divide-se os dados de entrada em dois ou mais
conjuntos disjuntos (separados);
● Recursão: soluciona-se os problemas associados aos
subconjuntos recursivamente;
● Conquista: obtém-se as soluções dos subproblemas e junta-se
as mesmas em uma única solução.
QuickSort – Esquema conceitual
Inicialmente, o vetor de chaves C é particionado em três
segmentos S1, S2 e S3.
● S2 deverá conter apenas UMA chave denominada pivô.
● S1 deverá conter todas as chaves cujos valores são MENORES
ou IGUAIS ao pivô. Esse segmento está posicionado à esquerda
de S2.
● S3 deverá conter todas as chaves cujos valores são MAIORES do
que o pivô. Esse segmento está posicionado à direita de S2.
QuickSort – Esquema conceitual
Inicialmente, o vetor C é particionado em três segmentos S1, S2 e S3.
● S2 deverá conter apenas UMA chave denominada pivô.
● S1 deverá conter todas as chaves cujos valores são MENORES ou
IGUAIS ao pivô. Esse segmento está posicionado à esquerda de S2.
● S3 deverá conter todas as chaves cujos valores são MAIORES do que
o pivô. Esse segmento está posicionado à direita de S2.
Vetor Inicial : C [ 1 .. n ]
n

1
Vetor Particionado
1

k-1
S1

k

n

k+1

S2

onde: C [ i ] <= C [ k ] , para i = 1, … , k - 1
C [ i ] > C [ k ] , para i = k + 1 , … , n

S3
QuickSort – Ilustração
Pivô é o ultimo elemento

(a) Fase de Divisão

5/23/2011

(b) Fase de Conquista
QuickSort

O particionamento é reaplicado aos segmentos S1 e S3 e a todos os
segmentos correspondentes daí resultantes com quantidade de
chaves MAIOR que 1.
Quando não restarem segmentos a serem particionados, o vetor
estará ordenado.
Perguntas:
1. Qual é o pivô ideal ?
2. Como escolher este pivô ?

Fonte: Prof. Alexandre Parra Carneiro da Silva:http://www.joinville.udesc.
br/portal/professores/parra/materiais/cap10_quicksort.pp
QuickSort
O pivô ideal é aquele que produz segmentos S1 e S3 com tamanhos
(aproximadamente) iguais: chave de valor mediano.
A identificação do pivô ideal requer a varredura de todo o vetor (o
benefício não justifica o custo).
Deseja-se um critério de escolha simples e rápido.
Sem conhecimento prévio sobre a distribuição de valores das
chaves, supõe-se que qualquer uma possa ser o pivô e arbitra-se,
por exemplo, a primeira chave.
Caso o vetor já se encontre parcialmente ordenado, pode-se
utilizar o elemento médio.
Fonte: Prof. Alexandre Parra Carneiro da Silva:http://www.joinville.udesc.
br/portal/professores/parra/materiais/cap10_quicksort.pp
Quicksort funcional (Haskell)

qs [] = []
qs (x:xs) = qs [y | y <- xs, y < x]
++ [x]
++ qs [y | y <- xs, y >= x]

É o quicksort aplicado a
todos elemente menores
que o pivó X
Concatenada (++), com o
pivó X
Concatenado com o
quicksort aplicado a todos
elementos maiores que o
pivó X
Quicksort funcional (Haskell)
Pivo é o primeiro elemento
Quicksort - Imperativo
1) Escolha do pivô (p);
2) Processo de comparações:
Compara v[1], v[2], ... até encontrar um elemento v[a]>p, onde v é o vetor de chaves.
Compara, a partir do final do vetor, os elementos v[n-1],v[n-2], ... Até encontrar v[b]<=p.
3) Neste ponto, troca-se v[a] e v[b], e a busca continua, para cima a partir de v[a+1], e
para baixo, a partir de v[b-1];
4) A busca termina, quando os pontos (a e b) se cruzarem. Neste momento, a posição
definitiva de p foi encontrada, e os valores de p e v[b] são trocados;
5) O particionamento é realizado até os segmentos resultantes tiveram comprimento > 1.

Fonte: Prof. Alexandre Parra Carneiro da Silva:http://www.joinville.udesc.
br/portal/professores/parra/materiais/cap10_quicksort.pp
Quicksort - Imperativo

Fonte: Algoritimos - Teoria e Prática. Cormen
MergeSort
●
●
●
●
●
●

Algoritmo particular de ordenação.
Método “dividir para conquistar”.
Divide o array no meio.
Ordena cada metade com Mergesort novamente.
Junta (merge) as partes já ordenadas.
Problema: necessita de um espaço igual ao dobro do tamanho
da lista a ser ordenada.
MergeSort
MergeSort - Função (Merge)

11

70

72

82

Divisão da direita

10

25

36

44

Divisão da esquerda
MergeSort - Função (Merge)

11

70

72

82

Divisão da direita

10

10

25

36

44

Divisão da esquerda
MergeSort - Função (Merge)

11

70

72

82

Divisão da direita

10

11

10

25

36

44

Divisão da esquerda
MergeSort - Função (Merge)

11

70

72

82

10

11

36

44

Divisão da esquerda

Divisão da direita

10

25

25
MergeSort - Função (Merge)

11

70

72

82

10

11

36

44

Divisão da esquerda

Divisão da direita

10

25

25

36
MergeSort - Função (Merge)

11

70

72

82

10

11

36

44

Divisão da esquerda

Divisão da direita

10

25

25

36

44
MergeSort - Função (Merge)

11

70

72

82

10

11

36

44

Divisão da esquerda

Divisão da direita

10

25

25

36

44

70

72

82
MergeSort - Algoritmo

void mergesort(int array[], int i, int f) {
if (i < f) {
int mid = (i+f)/2;
mergesort (array, i, mid);
mergesort (array, mid+1, f);
intercala (array, i, mid, f);
}
MergeSort - Atividade
Suponha que se deseja classificar crescentemente o
vetor abaixo utilizando o método Merge Sort:
9 25 10 18 5 7 15 3
Simule as iterações necessárias para a classificação.
ShellSort
A ideia básica
● O conceito pode ser usado com qualquer método de
ordenação
● Frequentemente, usamos o insertion sort
● Quando h é o gap entre os numeros a ser ordenados, caso
seja 1, temos um insertion sort

Divide o array em h subarrays
for (i =0 , i <= h, i ++)
Orderna subarray i
Ordena array
ShellSort
Considere o seguinte array
10|15|67|8|3|2|9|30|26|42|10|21
Para H = 4, temos 4 arrays de tamanho 3

A1

A2

A3

A4

10
3
26

15
2
42

67
9
10

8
30
21
ShellSort
Considere o seguinte array
10|15|67|8|3|2|9|30|26|42|10|21
Para H = 4, temos 4 arrays de tamanho 3
A1

A2

A3

A4

3
10
26

2
15
42

9
10
67

8
21
30

Ordenado os
subarrays
ShellSort
Considere o seguinte array
10|15|67|8|3|2|9|30|26|42|10|21
Para H = 4, temos 4 arrays de tamanho 3
A1

A2

A3

A4

3
10
26

2
15
42

9
10
67

Ordenado os
subarrays

8
21
30

3| 2 |9 | 8 | 10 | 15 | 10 | 21 | 26 | 42 | 67 | 30

Array QUASE
ordenado
ShellSort
Como calcular a sequência de H's ?
○ Uma forma simples é dividir o valor de N por dois a
cada iteração.
○ Exemplo, para N = 12 teremos
■ 12/ 2 → h = 6
■6 / 2 → h = 3
■3 / 2 → h = 1
ShellSort
Simulando a ordenação do seguinte vetor, N =12
10|15|67|8|3|2|9|30|26|42|10|21
ShellSort
Simulando a ordenação do seguinte vetor, N =12
10|15|67|8|3|2|9|30|26|42|10|21
A1

A2

A3

A4

A5

A6

N/2 -> H = 6
10

15

67

8

3

2

9

30

26

42

10

21
ShellSort
Simulando a ordenação do seguinte vetor, N =12
10|15|67|8|3|2|9|30|26|42|10|21
A1

A2

A3

A4

A5

A6

9

15

26

8

3

2

10

30

67

42

10

21

9|15|26|8|3|2|10|30|67|42|10|21

N/2 -> H = 6
ShellSort
Simulando a ordenação do seguinte vetor, N =12
9|15|26|8|3|2|10|30|67|42|10|21
A1

A2

A3

9

15

26

8

3

2

10

30

67

42

10

21

(N/2)/2 -> H = 3
ShellSort
Simulando a ordenação do seguinte vetor, N =12
9|15|26|8|3|2|10|30|67|42|10|21
A1

A2

A3

8

3

2

9

10

21

10

15

26

42

30

(N/2)/2 -> H = 3

67
8 |3 |2 |9 |10| 21| 10| 15| 26| 42| 30| 67
ShellSort
Simulando a ordenação do seguinte vetor, N =12

8 |3 |2 |9 |10| 21| 10| 15| 26| 42| 30| 67

2| 3| 8| 9| 10| 10| 15| 21| 26| 30| 42| 67

H=1
Referências
Estruturas de Dados e Algoritmos em Java
Por Michael T. Goodrich,Roberto Tamassia
Prof. Alexandre Parra Carneiro da Silva:http://www.
joinville.udesc.
br/portal/professores/parra/materiais/cap10_quicks
ort.pp

Contenu connexe

Tendances

Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosElaine Cecília Gatto
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenaçãoDaiana de Ávila
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersDaniel Maia
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoLeinylson Fontinele
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08André Phillip Bertoletti
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...Marcello Thiry
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 

Tendances (20)

Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos Básicos
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 
Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
 
Sistema acadêmico
Sistema acadêmicoSistema acadêmico
Sistema acadêmico
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 

En vedette

métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortAlessandro Trevisan
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
 
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoOrlando Junior
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoLenon Fachiano
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dadosThalita Chaves
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 
Ordenação de Vetores Gnome Sort
Ordenação de Vetores Gnome SortOrdenação de Vetores Gnome Sort
Ordenação de Vetores Gnome Sortf2008
 
Pdc 2011 15
Pdc 2011 15Pdc 2011 15
Pdc 2011 15gracabib
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç oCravid Ekuikui
 
Condicional 02 Pascal Exercicio
Condicional 02 Pascal ExercicioCondicional 02 Pascal Exercicio
Condicional 02 Pascal ExercicioMarcus Vinicius
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesMauricio Volkweis Astiazara
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsortFlávio Freitas
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 

En vedette (20)

métodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sortmétodos ordenação C, bolha, selection sort e insertion sort
métodos ordenação C, bolha, selection sort e insertion sort
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 
Análise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenaçãoAnálise empírica de algoritmos de ordenação
Análise empírica de algoritmos de ordenação
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 
Ordenação por inserção
Ordenação por inserçãoOrdenação por inserção
Ordenação por inserção
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de Ordenação
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
Insertion Sort
Insertion SortInsertion Sort
Insertion Sort
 
Metodos de ordenação estrutura de dados
Metodos de ordenação   estrutura de dadosMetodos de ordenação   estrutura de dados
Metodos de ordenação estrutura de dados
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Java 12 Colecoes
Java 12 ColecoesJava 12 Colecoes
Java 12 Colecoes
 
Ordenação de Vetores Gnome Sort
Ordenação de Vetores Gnome SortOrdenação de Vetores Gnome Sort
Ordenação de Vetores Gnome Sort
 
Pdc 2011 15
Pdc 2011 15Pdc 2011 15
Pdc 2011 15
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç o
 
Condicional 02 Pascal Exercicio
Condicional 02 Pascal ExercicioCondicional 02 Pascal Exercicio
Condicional 02 Pascal Exercicio
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsort
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 

Similaire à Ordenação

Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmosSandro Arpi
 
Classificação de dados
Classificação de dadosClassificação de dados
Classificação de dadosFernando Vargas
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Leinylson Fontinele
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
 
Tutorial aed iii 006 - algoritmo de ordenação quicksort
Tutorial aed iii   006 - algoritmo de ordenação quicksortTutorial aed iii   006 - algoritmo de ordenação quicksort
Tutorial aed iii 006 - algoritmo de ordenação quicksortFlávio Freitas
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopJean Martina
 
Algoritmos_de_Ordenacao.ppt
Algoritmos_de_Ordenacao.pptAlgoritmos_de_Ordenacao.ppt
Algoritmos_de_Ordenacao.pptjoaquinaCouve
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 
[TCC] Apresentacao - Agrupamento de Instâncias
[TCC] Apresentacao - Agrupamento de Instâncias[TCC] Apresentacao - Agrupamento de Instâncias
[TCC] Apresentacao - Agrupamento de InstânciasAugusto Giles
 
Introdução - Algoritmos
Introdução - AlgoritmosIntrodução - Algoritmos
Introdução - AlgoritmosPsLucas
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De OrdenaçãoBrian Supra
 
excelintermedirio-090723125852-phpapp02.ppt
excelintermedirio-090723125852-phpapp02.pptexcelintermedirio-090723125852-phpapp02.ppt
excelintermedirio-090723125852-phpapp02.pptelainesanchoparaiso
 
7082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-201809037082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-20180903Ademar Trindade
 

Similaire à Ordenação (20)

Aula 4
Aula 4 Aula 4
Aula 4
 
Trabalho de algoritmos
Trabalho de algoritmosTrabalho de algoritmos
Trabalho de algoritmos
 
Classificação de dados
Classificação de dadosClassificação de dados
Classificação de dados
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
Pesquisa e Ordenação - Aula 08 - Métodos de Ordenação (Shell sort)
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
Tutorial aed iii 006 - algoritmo de ordenação quicksort
Tutorial aed iii   006 - algoritmo de ordenação quicksortTutorial aed iii   006 - algoritmo de ordenação quicksort
Tutorial aed iii 006 - algoritmo de ordenação quicksort
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Algoritmos_de_Ordenacao.ppt
Algoritmos_de_Ordenacao.pptAlgoritmos_de_Ordenacao.ppt
Algoritmos_de_Ordenacao.ppt
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
[TCC] Apresentacao - Agrupamento de Instâncias
[TCC] Apresentacao - Agrupamento de Instâncias[TCC] Apresentacao - Agrupamento de Instâncias
[TCC] Apresentacao - Agrupamento de Instâncias
 
Introdução - Algoritmos
Introdução - AlgoritmosIntrodução - Algoritmos
Introdução - Algoritmos
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De Ordenação
 
Aula 21
Aula 21Aula 21
Aula 21
 
excelintermedirio-090723125852-phpapp02.ppt
excelintermedirio-090723125852-phpapp02.pptexcelintermedirio-090723125852-phpapp02.ppt
excelintermedirio-090723125852-phpapp02.ppt
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
7082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-201809037082 texto do artigo-33807-2-10-20180903
7082 texto do artigo-33807-2-10-20180903
 

Plus de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Plus de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Ordenação

  • 1. Introdução ao Ordenação JQuery e AJAX Prof: Sérgio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3. Introdução Processo de organizar ítens em ordem (de)crescente, segundo algum critério. Também chamado de classificaçao. Aplicações que utilizam-se de dados classificados ● Teste de unicidade: verifica se todos os elementos de uma coleção são distintos. ● Remoção de duplicatas: remove eventuais duplicatas de uma coleção. ● Busca: conforme foi visto, operações de busca são bastante facilitadas quando os dados são ordenados. ● Encontrar o i-ésimo maior (ou menor) elemento de uma coleção ● Contagem de freqüência (moda): encontra o elemento que ocorre com mais freqüência numa coleção. ● Encontrar a união ou a interseção de dois conjuntos. Fonte: http://www.joinville.udesc.br/portal/professores/parra/materiais/cap9_classificacao.ppt
  • 4. Introdução Antes de prosseguimos, considere as seguintes definições. Define-se um tabela de tamanho n como uma seqüência de n itens: r1, r2, ..., rn chamados de registros Uma chave ki é associada com cada registro ri. A chave é usualmente (mas nem sempre) um campo do registro. struct Item{ int chave; ... }
  • 5. Principais características Um método de ordenação é instável caso a ordem relativa dos itens com chaves iguais é alterada durante o processo de ordenação ou estável caso contrário. Uma lista ordenada previamente pelo horário Agora a mesma lista ordenada por destino, mantendo a ordenação por horários
  • 6. Principais características Ordenação interna o conjunto de registros cabe todo em na memória principal, ou externa caso parte dos dados estejam em memória auxiliar. Classificação local: realização sobre a mesma área física onde se encontram as chaves. Não usa memória adicional (in-loco)
  • 7. ANÁLISE DE EFICIÊNCIA A eficiência de tempo é calculada pelo número de operações críticas efetuadas. ● comparação entre chaves; ● movimentação de registros ou de ponteiros para registros; ● troca de dois registros. Para determinadas instâncias de um dado problema, alguns algoritmos podem ser beneficiados em algumas dessas operações: ● Exemplo: menor número de trocas e mesmo número de comparações.
  • 8. Estratégias Por troca: são baseados na troca de posição dos dados, se o segundo elemento é menor do que o primeiro, de forma a ordená-los. ● Exemplos: BubbleSort (Bolha) e QuickSort Por seleção: parte do princípio de realizar o isolamento de elementos para posições ordenadas. ● Exemplos: selection sort e heap sort Por inserção: baseiam-se no deslocamento de elementos da estrutura frente a um elemento de busca. Por intercalação, criar uma seqüência ordenada a partir de duas outras também ordenadas. Esse método é conhecido também como mistura ou merge em inglês.
  • 9. Simples - Eficientes Medidas de complexidade levam em conta: ● O número de comparação entre as chaves ● O número de trocas entre os itens São classificados em dois tipos: Métodos Simples: mais recomendados para conjuntos pequenos de dados. Usam mais comparações, mas produzem códigos menores e mais simples; Métodos Eficientes ou Sofisticados: adequados para conjuntos maiores de dados. Usam menos comparações, porém produzem códigos mais complexos e com muitos detalhes.
  • 10. Simples - Eficientes Ordenação por Seleção (Selection Sort) Ordenação por Inserção (Insertion Sort) Métodos Simples Ordenação por Seleção e Troca (Bubble Sort) Ordenação por Inserção através de incrementos decrescentes (ShellSort) Ordenação por Particionamento (QuickSort) Ordenação de Árvores (HeapSort) Métodos Eficientes
  • 11. Métodos Simples Ordenação por Seleção (Selection Sort) Ordenação por Inserção (Insertion Sort) Ordenação por Seleção e Troca (Bubble Sort)
  • 12. Ordenação por Seleção A cada passo, seleciona o maior (ou menor), e colocálo na posição correta.
  • 13. Ordenação por Seleção - Exemplo 1 2 3 4 5 6 Chaves Iniciais: O R D E N A i=1: A R D E N O i=2: A D R E N O i=3: A D E R N O i=4: A D E N R O i=5: A D E N O R
  • 14. Ordenação por Seleção - Código SelectionSort(A) 1 n <- tamanho[A] 2 para I <- 1 até N-1 faça 3 J <- indiceDoMenorValor (A,i,n) 4 troque A[i] com A[J] 5 // A[1..i] os menores números (1 até i) em ordem 6 fim para; 7 fim procedimento
  • 15. Ordenação por Seleção Atividade Suponha que se deseja classificar crescentemente o vetor abaixo utilizando o método SelectionSort: 9 25 10 18 5 7 15 3 Simule as iterações necessárias para a classificação. Quantas operações de comparações foram realizadas?
  • 16. Bubble Sort (método da bolha) Princípio: ● As chaves Item[1].Chave e Item[2].Chave são comparadas e trocadas se estiverem fora de ordem; ● Repete-se o processo de comparação e troca com Item[2] e Item[3], Item[3] e Item[4], ... Por que Bolha? Se o vetor a ser ordenado for colocado na vertical, com Item[n] em cima e Item[1] embaixo, durante cada passo o menor elemento “sobe” até encontrar um elemento maior ainda, como se uma bolha subisse dentro de um tubo de acordo com sua densidade
  • 17. Bubble Sort (método da bolha) i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 44 06 06 06 06 06 06 06 55 44 12 12 12 12 12 12 12 55 44 18 18 18 18 18 42 12 55 44 42 42 42 42 94 42 18 55 44 44 44 44 18 94 42 42 55 55 55 55 06 18 94 67 67 67 67 67 67 67 67 94 94 94 94 94 Chaves Iniciais
  • 18. Bubble Sort (método da bolha) Note que no exemplo, as três últimas iterações não afetam a ordem do vetor; assim o algoritmo pode ser melhorado! Técnica óbvia: manter uma indicação para saber se houve ou não troca na última iteração: se não houve, o vetor já está ordenado
  • 19. Bubble Sort (método da bolha) Existem várias variações de acordo com a ordem desejada: “Sobe” os menores valores em direção ao final do vetor “Sobe” os maiores valores em direção ao final do vetor “desce” os menores valores em direção ao inicio do vetor “desce” os maiores valores em direção ao inicio do vetor
  • 20. Bubble Sort (método da bolha) BubbleSort(A) 1 n <- tamanho[A] 2 para I <- 1 até N faça 3 Para J <- N até i-1 faça {contador decrescente} 4 Se A[J] < A[J-1] então 5 troque A[i] com A[J] 6 fim se 7 fim para; 8 fim procedimento
  • 21. Bubble Sort (método da bolha) Suponha que se deseja classificar crescentemente o vetor abaixo utilizando o método BubbleSort: 9 25 10 18 5 7 15 3 Simule as iterações necessárias para a classificação. Quantas operações de comparações foram realizadas?
  • 23. Ordenação por inserção 3 5 7 3 5 7 8 3 5 6 7 8
  • 24. Ordenação por inserção Procedimento Os elementos são divididos em uma seqüência de destino a1, ..., ai-1 e em uma seqüência fonte ai, ..., an. Em cada passo, a partir de i =2, o i-ésimo item da seqüência fonte é retirado e transferido para a seqüência destino sendo inserido na posição adequada
  • 26. Ordenação por inserção Suponha que se deseja classificar crescentemente o vetor abaixo utilizando o método Insertion Sort: 9 25 10 18 5 7 15 3 Simule as iterações necessárias para a classificação. Quantas operações de comparações foram realizadas?
  • 28. QuickSort Baseia-se em um padrão de projeto fundamental para solução de problemas conhecida como Divisão e Conquista (Divide-andConquer). Segundo Goodrich, o padrão pode ser descrito, de maneira geral, como sendo composto de 3 fases: ● Divisão: divide-se os dados de entrada em dois ou mais conjuntos disjuntos (separados); ● Recursão: soluciona-se os problemas associados aos subconjuntos recursivamente; ● Conquista: obtém-se as soluções dos subproblemas e junta-se as mesmas em uma única solução.
  • 29. QuickSort – Esquema conceitual Inicialmente, o vetor de chaves C é particionado em três segmentos S1, S2 e S3. ● S2 deverá conter apenas UMA chave denominada pivô. ● S1 deverá conter todas as chaves cujos valores são MENORES ou IGUAIS ao pivô. Esse segmento está posicionado à esquerda de S2. ● S3 deverá conter todas as chaves cujos valores são MAIORES do que o pivô. Esse segmento está posicionado à direita de S2.
  • 30. QuickSort – Esquema conceitual Inicialmente, o vetor C é particionado em três segmentos S1, S2 e S3. ● S2 deverá conter apenas UMA chave denominada pivô. ● S1 deverá conter todas as chaves cujos valores são MENORES ou IGUAIS ao pivô. Esse segmento está posicionado à esquerda de S2. ● S3 deverá conter todas as chaves cujos valores são MAIORES do que o pivô. Esse segmento está posicionado à direita de S2. Vetor Inicial : C [ 1 .. n ] n 1 Vetor Particionado 1 k-1 S1 k n k+1 S2 onde: C [ i ] <= C [ k ] , para i = 1, … , k - 1 C [ i ] > C [ k ] , para i = k + 1 , … , n S3
  • 31. QuickSort – Ilustração Pivô é o ultimo elemento (a) Fase de Divisão 5/23/2011 (b) Fase de Conquista
  • 32. QuickSort O particionamento é reaplicado aos segmentos S1 e S3 e a todos os segmentos correspondentes daí resultantes com quantidade de chaves MAIOR que 1. Quando não restarem segmentos a serem particionados, o vetor estará ordenado. Perguntas: 1. Qual é o pivô ideal ? 2. Como escolher este pivô ? Fonte: Prof. Alexandre Parra Carneiro da Silva:http://www.joinville.udesc. br/portal/professores/parra/materiais/cap10_quicksort.pp
  • 33. QuickSort O pivô ideal é aquele que produz segmentos S1 e S3 com tamanhos (aproximadamente) iguais: chave de valor mediano. A identificação do pivô ideal requer a varredura de todo o vetor (o benefício não justifica o custo). Deseja-se um critério de escolha simples e rápido. Sem conhecimento prévio sobre a distribuição de valores das chaves, supõe-se que qualquer uma possa ser o pivô e arbitra-se, por exemplo, a primeira chave. Caso o vetor já se encontre parcialmente ordenado, pode-se utilizar o elemento médio. Fonte: Prof. Alexandre Parra Carneiro da Silva:http://www.joinville.udesc. br/portal/professores/parra/materiais/cap10_quicksort.pp
  • 34. Quicksort funcional (Haskell) qs [] = [] qs (x:xs) = qs [y | y <- xs, y < x] ++ [x] ++ qs [y | y <- xs, y >= x] É o quicksort aplicado a todos elemente menores que o pivó X Concatenada (++), com o pivó X Concatenado com o quicksort aplicado a todos elementos maiores que o pivó X
  • 35. Quicksort funcional (Haskell) Pivo é o primeiro elemento
  • 36. Quicksort - Imperativo 1) Escolha do pivô (p); 2) Processo de comparações: Compara v[1], v[2], ... até encontrar um elemento v[a]>p, onde v é o vetor de chaves. Compara, a partir do final do vetor, os elementos v[n-1],v[n-2], ... Até encontrar v[b]<=p. 3) Neste ponto, troca-se v[a] e v[b], e a busca continua, para cima a partir de v[a+1], e para baixo, a partir de v[b-1]; 4) A busca termina, quando os pontos (a e b) se cruzarem. Neste momento, a posição definitiva de p foi encontrada, e os valores de p e v[b] são trocados; 5) O particionamento é realizado até os segmentos resultantes tiveram comprimento > 1. Fonte: Prof. Alexandre Parra Carneiro da Silva:http://www.joinville.udesc. br/portal/professores/parra/materiais/cap10_quicksort.pp
  • 37. Quicksort - Imperativo Fonte: Algoritimos - Teoria e Prática. Cormen
  • 38. MergeSort ● ● ● ● ● ● Algoritmo particular de ordenação. Método “dividir para conquistar”. Divide o array no meio. Ordena cada metade com Mergesort novamente. Junta (merge) as partes já ordenadas. Problema: necessita de um espaço igual ao dobro do tamanho da lista a ser ordenada.
  • 40. MergeSort - Função (Merge) 11 70 72 82 Divisão da direita 10 25 36 44 Divisão da esquerda
  • 41. MergeSort - Função (Merge) 11 70 72 82 Divisão da direita 10 10 25 36 44 Divisão da esquerda
  • 42. MergeSort - Função (Merge) 11 70 72 82 Divisão da direita 10 11 10 25 36 44 Divisão da esquerda
  • 43. MergeSort - Função (Merge) 11 70 72 82 10 11 36 44 Divisão da esquerda Divisão da direita 10 25 25
  • 44. MergeSort - Função (Merge) 11 70 72 82 10 11 36 44 Divisão da esquerda Divisão da direita 10 25 25 36
  • 45. MergeSort - Função (Merge) 11 70 72 82 10 11 36 44 Divisão da esquerda Divisão da direita 10 25 25 36 44
  • 46. MergeSort - Função (Merge) 11 70 72 82 10 11 36 44 Divisão da esquerda Divisão da direita 10 25 25 36 44 70 72 82
  • 47. MergeSort - Algoritmo void mergesort(int array[], int i, int f) { if (i < f) { int mid = (i+f)/2; mergesort (array, i, mid); mergesort (array, mid+1, f); intercala (array, i, mid, f); }
  • 48. MergeSort - Atividade Suponha que se deseja classificar crescentemente o vetor abaixo utilizando o método Merge Sort: 9 25 10 18 5 7 15 3 Simule as iterações necessárias para a classificação.
  • 49. ShellSort A ideia básica ● O conceito pode ser usado com qualquer método de ordenação ● Frequentemente, usamos o insertion sort ● Quando h é o gap entre os numeros a ser ordenados, caso seja 1, temos um insertion sort Divide o array em h subarrays for (i =0 , i <= h, i ++) Orderna subarray i Ordena array
  • 50. ShellSort Considere o seguinte array 10|15|67|8|3|2|9|30|26|42|10|21 Para H = 4, temos 4 arrays de tamanho 3 A1 A2 A3 A4 10 3 26 15 2 42 67 9 10 8 30 21
  • 51. ShellSort Considere o seguinte array 10|15|67|8|3|2|9|30|26|42|10|21 Para H = 4, temos 4 arrays de tamanho 3 A1 A2 A3 A4 3 10 26 2 15 42 9 10 67 8 21 30 Ordenado os subarrays
  • 52. ShellSort Considere o seguinte array 10|15|67|8|3|2|9|30|26|42|10|21 Para H = 4, temos 4 arrays de tamanho 3 A1 A2 A3 A4 3 10 26 2 15 42 9 10 67 Ordenado os subarrays 8 21 30 3| 2 |9 | 8 | 10 | 15 | 10 | 21 | 26 | 42 | 67 | 30 Array QUASE ordenado
  • 53. ShellSort Como calcular a sequência de H's ? ○ Uma forma simples é dividir o valor de N por dois a cada iteração. ○ Exemplo, para N = 12 teremos ■ 12/ 2 → h = 6 ■6 / 2 → h = 3 ■3 / 2 → h = 1
  • 54. ShellSort Simulando a ordenação do seguinte vetor, N =12 10|15|67|8|3|2|9|30|26|42|10|21
  • 55. ShellSort Simulando a ordenação do seguinte vetor, N =12 10|15|67|8|3|2|9|30|26|42|10|21 A1 A2 A3 A4 A5 A6 N/2 -> H = 6 10 15 67 8 3 2 9 30 26 42 10 21
  • 56. ShellSort Simulando a ordenação do seguinte vetor, N =12 10|15|67|8|3|2|9|30|26|42|10|21 A1 A2 A3 A4 A5 A6 9 15 26 8 3 2 10 30 67 42 10 21 9|15|26|8|3|2|10|30|67|42|10|21 N/2 -> H = 6
  • 57. ShellSort Simulando a ordenação do seguinte vetor, N =12 9|15|26|8|3|2|10|30|67|42|10|21 A1 A2 A3 9 15 26 8 3 2 10 30 67 42 10 21 (N/2)/2 -> H = 3
  • 58. ShellSort Simulando a ordenação do seguinte vetor, N =12 9|15|26|8|3|2|10|30|67|42|10|21 A1 A2 A3 8 3 2 9 10 21 10 15 26 42 30 (N/2)/2 -> H = 3 67 8 |3 |2 |9 |10| 21| 10| 15| 26| 42| 30| 67
  • 59. ShellSort Simulando a ordenação do seguinte vetor, N =12 8 |3 |2 |9 |10| 21| 10| 15| 26| 42| 30| 67 2| 3| 8| 9| 10| 10| 15| 21| 26| 30| 42| 67 H=1
  • 60. Referências Estruturas de Dados e Algoritmos em Java Por Michael T. Goodrich,Roberto Tamassia Prof. Alexandre Parra Carneiro da Silva:http://www. joinville.udesc. br/portal/professores/parra/materiais/cap10_quicks ort.pp