SlideShare uma empresa Scribd logo
1 de 30
Profa. Divani Barbosa Gavinier
Aula 4 – parte 1 – Estrutura de Dados
2
Ordenação é o ato de se
colocar os elementos de uma
sequência de informações, ou
dados, em uma ordem
predefinida.
Algoritmos a serem vistos:
 BubbleSort
 Seleção
 Inserção
 MergeSort
 QuickSort
Métodos Simples
Métodos Eficientes
Rápidos (menos da metade do tempo
que os métodos simples)
3
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
 Verifico a primeira posição do vetor
 Procuro qual o elemento menor nas posições superiores
 Se existe menor que o atual faço a troca
4
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4 Passo 1 → troca (1<13)
 Verifico a segunda posição do vetor
 Procuro qual o elemento menor nas posições superiores
 Se existe menor que o atual faço a troca
5
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4
1 4 5 13 7
Passo 1 → troca
Passo 2 → troca (2<7)
 Verifico a terceira posição do vetor
 Procuro qual o elemento menor nas posições superiores
 Se existe menor que o atual faço a troca
6
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4
1 4 5 13 7
1 4 5 13 7
Passo 1 → troca
Passo 2 → troca
Passo 3 → não troca
7
Consiste em trocar o menor elemento de um
vetor com o elemento posicionado no início
do vetor, depois o segundo menor elemento
para a segunda posição, e assim
sucessivamente com os (n - 1) elementos
restantes, até os últimos dois elementos.
Exemplo: Considere o seguinte vetor:
13 7 5 1 4v
0 1 2 3 4
1 7 5 13 4
1 4 5 13 7
1 4 5 13 7
1 4 5 7 13
Passo 1 → troca
Passo 2 → troca
Passo 3 → não troca
Passo 4 → troca (7 < 13)
public void selecao() {
int min;
for (int i = 0; i < n-1; i++) {
min = i;
for (int j = i+1; j < n; j++)
if (v[j] < v[min])
min = j;
troca(i, min);
}
}
8
private void troca(int um, int dois) {
long temp = v[um];
v[um] = v[dois];
v[dois] = temp;
}
min é a posição do
elemento mínimo
laço responsável pela
varredura de n–1 vezes
Método responsável
pela troca de
elementos de um
vetor do tipo long.
min recebe a posição i
Procura nas posições
superiores a i o
elemento menor que
min
caso encontre elemento
menor que min:
variável min recebe a
posição desse
elemento
9
Vantagens:
Desvantagens:
Ele é um algoritmo simples de ser
implementado em comparação aos demais
Ele é um dos mais lentos para vetores de tamanhos grandes
Ele é mais veloz que o bubblesort na ordenação de vetores de
tamanhos pequenos (Inserção é ainda mais veloz)
Ele faz sempre n2 comparações, independente do vetor
está ordenado ou não.
10
Inicialmente, ela ordena os dois primeiros
elementos do vetor, em seguida, o
algoritmo insere o terceiro elemento na sua
posição ordenada com relação aos dois
primeiros elementos, e assim por diante até
que todo o vetor esteja ordenado.
Exemplo 1: Considere o seguinte vetor:
49 67 33 96 21 33 58 74
49 67 33 96 21 33 58 74
0 1 2 3 4 5 6 7
V
Exemplo: Considere o seguinte vetor:
49 67 33 96 21 33 58 7449
49 67 33 96 21 33 58 74V
Passo: Primeiro elemento é passado
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável marcada 1
49 67 33 96 21 33 58 7449
49 67
49 67 33 96 21 33 58 74V
Passo: Segundo elemento é passado em sua posição ordenada e assim por
diante...
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável marcada 2
49 67 33 96 21 33 58 74
49 67 33 96 21 33 58 74V
49
49 67
33 49 67
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável marcada 3
49 67 33 96 21 33 58 74
49 67 33 96 21 33 58 74V
33 49 67 96
49
49 67
33 49 67
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Var. marcada 4
49 67 33 96 21 33 58 74
49 67 33 96 21 33 58 74V
21 33 49 67 96
33 49 67 96
49
49 67
33 49 67
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável
marcada 5
49 67 33 96 21 33 58 74
49 67 33 96 21 33 58 74V
21 33 49 67 96
21 33 33 49 67 96
33 49 67 96
49
49 67
33 49 67
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável
marcada 6
49 67 33 96 21 33 58 74
49 67 33 96 21 33 58 74V
21 33 49 67 96
21 33 33 49 67 96
21 33 33 49 58 67 96
33 49 67 96
49
49 67
33 49 67
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável
marcada 7
49 67 33 96 21 33 58 74
21 33 49 67 96
21 33 33 49 67 96
21 33 33 49 58 67 96
21 33 33 49 58 67 74 96
49 67 33 96 21 33 58 74V
33 49 67 96
49
49 67
33 49 67
0 1 2 3 4 5 6 7
Exemplo: Considere o seguinte vetor:
Variável
marcada 8
public void insercao() {
int i, j;
long temp;
for (i=1; i < n; i++) {
temp = v[i]; // variável marcada
j = i;
while ((j > 0) && (v[j-1] > temp))
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = temp;
}
}
20
public void insercao() {
int i, j;
long temp;
for (i=1; i < n; i++) {
temp = v[i]; // variável marcada
j = i;
while ((j > 0) && (v[j-1] > temp))
{
v[j] = v[j-1];
j = j - 1;
}
v[j] = temp;
}
}
21
laço responsável pela
varredura do vetor
temp recebe o
conteúdo do item atual
(posição i)
Laço responsável
pela movimentação
dos outros itens em
suas novas posições
(ordenada)
Inserção do item atual
na sua posição
ordenada
conteúdo do item
atual (variável temp)
22
Ordenação por
seleção
BubbleSort Ordenação por
inserção
Percorre todos
elementos e ajusta
no final
Varrendo e
apanhando itens
Selecionando
entre os próximos
itens qual o
menorUsa um método simples
de ordenação por troca,
porém sua eficiência é a
menor entre os três.
Admite melhoramentos, por
isso, é muito usado como
base para construção de
métodos mais elaborados.
Eficiente para vetores com
pequena quantidade de
dados
Ineficiente para vetores com
grande quantidades de
dados
É o melhor método para se
usar quando o conteúdo
está quase ordenado.
Apresenta o melhor
comportamento entre os
três quanto ao número
de movimentos.
Portanto, é o ideal para
vetores com grande
quantidade de dados.
23
Demonstra como tempos de execução
são afetados pelo numero de itens
24
Demonstra como tempos de execução
são afetados pelo numero de itens
Resumo do tempo de execução
dos algoritmos:
Média Pior Melhor
Bolha O(n2) O(n2) O(n)
Seleção O(n2) O(n2) O(n2)
Inserção O(n2) O(n2) O(n)
25
 Os algoritmos de ordenação vistos adotam um vetor
como a estrutura de armazenamento de dados;
 Ordenar envolve comparar as chaves de itens de
dados no vetor e mover os itens até que eles estejam
na ordem classificada;
 Todos os algoritmos vistos até essa aula executam
em tempo O(n2). Entretanto alguns podem ser mais
rápidos que os outros;
 A ordenação pelo método da bolha é a menos
eficiente, porém o algoritmo mais simples;/
 A ordenação por inserção é a mais usada das
ordenações com tempo O(n2);
 Nenhuma das ordenações vistas até essa aula requer
mais do que uma variável temporária, além do vetor
original.
26
2- O algoritmo pelo método da bolha alterna-se entre:
a. Comparar e trocar
b. Mover e Copiar
c. Mover e Comparar
d. Copiar e Comparar
1- Algoritmos de ordenação por computador são mais
limitados que humanos no sentido de que:
a. Humanos são melhores em inventar novos
algoritmos.
b. Computadores podem lidar apenas com uma
quantidade fixa de dados
c. Humanos sabem o que ordenar, ao que
computadores precisam ser informados.
d. Computadores podem comparar apenas duas
coisas de cada vez
27
3- Verdadeiro ou Falso: Se houver n itens, a ordenação
por Seleção fara exatamente n*n comparações.
4- Na ordenação por Inserção, a variável marcada
descrita na aula corresponde a qual variável no
algoritmo?
a. i
b. j
c. temp
d. v[j]
28
Escrever programas para resolver os projetos de programação ajuda a
solidificar sua compreensão do material e demonstra como aplicar os
conceitos da aula.
5- Considere que a ordenação para n inteiros números
leve t segundos.
Calcule o tempo de ordenação para cem, mil, dez mil e
cem mil elementos para todos os algoritmos de
ordenação vistos: bubblesort, seleção e inserção.
Imprima na tela da seguinte forma:
Obtenha valores aleatórios entre 0 e 500 para o vetor
desordenado.
29
import java.util.Random;
public class Aleatorios {
public static void main(String[] args) {
Random gerador = new Random();
//imprime sequência de 10 números inteiros aleatórios
for (int i = 0; i < 10; i++)
System.out.println(gerador.nextInt(101));
/* Como o parâmetro do método é 101, os valores
gerados serão entre 0 e 100 */
}
}
Dica 1: Programa exemplo de como obter valores
aleatórios entre 0 e 100.
Dica 2: No desenvolvimento do programa não se esqueça
de manter uma cópia do vetor desordenado gerado.
Exemplo: for(i=0; i<n; i++) copia[i]=v[i];
Ordene somente a copia, não o vetor v.
30
Dica 3: Programa exemplo de como calcular o tempo em
milissegundos em Java.
public class Tempo {
public static void main(String[] args) {
long tempoInicio;
// inicia contagem do tempo
tempoInicio= System.currentTimeMillis();
// imprime sequência de 0 a 999
for (int i = 0; i < 1000; i++)
System.out.print(i + " ");
/* finaliza contagem do tempo e imprime na tela o tempo
gasto para impressão da sequencia de 0 a 999 */
System.out.println("nTempo Total: " +
(System.currentTimeMillis()-tempoInicio) + " milisegundos");
}
}

Mais conteúdo relacionado

Mais procurados

Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10PeslPinguim
 
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
 
Sistemas 2009 1
Sistemas 2009 1Sistemas 2009 1
Sistemas 2009 1Eli Brito
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsortFlávio Freitas
 
Cálculo numérico aula 04 - resolução de sistemas de equações lineares - mét...
Cálculo numérico   aula 04 - resolução de sistemas de equações lineares - mét...Cálculo numérico   aula 04 - resolução de sistemas de equações lineares - mét...
Cálculo numérico aula 04 - resolução de sistemas de equações lineares - mét...Rodolfo Almeida
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - OrdenaçãoAnderson Zardo
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Apostila sistemas lineares
Apostila sistemas linearesApostila sistemas lineares
Apostila sistemas linearesday ....
 
Resolução de Sistemas Lineares
Resolução de Sistemas LinearesResolução de Sistemas Lineares
Resolução de Sistemas LinearesKleber Jacinto
 
Resolução de sistemas lineares
Resolução de sistemas linearesResolução de sistemas lineares
Resolução de sistemas lineareskarinsimonato
 

Mais procurados (19)

Sist cont i_conf2_2014
Sist cont i_conf2_2014Sist cont i_conf2_2014
Sist cont i_conf2_2014
 
2 referencial teorico
2 referencial teorico2 referencial teorico
2 referencial teorico
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Aula 22
Aula 22Aula 22
Aula 22
 
Sistemas lineares
Sistemas linearesSistemas lineares
Sistemas lineares
 
Cap09
Cap09Cap09
Cap09
 
Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10Curso Básico de Java - Aula 10
Curso Básico de Java - Aula 10
 
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
 
Sist cont i_conf3_2014
Sist cont i_conf3_2014Sist cont i_conf3_2014
Sist cont i_conf3_2014
 
Sistemas 2009 1
Sistemas 2009 1Sistemas 2009 1
Sistemas 2009 1
 
Tutorial aed iii 002 - algoritmo de ordenação shellsort
Tutorial aed iii   002 - algoritmo de ordenação shellsortTutorial aed iii   002 - algoritmo de ordenação shellsort
Tutorial aed iii 002 - algoritmo de ordenação shellsort
 
Sistemas lineares
Sistemas linearesSistemas lineares
Sistemas lineares
 
Cálculo numérico aula 04 - resolução de sistemas de equações lineares - mét...
Cálculo numérico   aula 04 - resolução de sistemas de equações lineares - mét...Cálculo numérico   aula 04 - resolução de sistemas de equações lineares - mét...
Cálculo numérico aula 04 - resolução de sistemas de equações lineares - mét...
 
ShellSort - Ordenação
ShellSort - OrdenaçãoShellSort - Ordenação
ShellSort - Ordenação
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Apostila sistemas lineares
Apostila sistemas linearesApostila sistemas lineares
Apostila sistemas lineares
 
Resolução de Sistemas Lineares
Resolução de Sistemas LinearesResolução de Sistemas Lineares
Resolução de Sistemas Lineares
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
Resolução de sistemas lineares
Resolução de sistemas linearesResolução de sistemas lineares
Resolução de sistemas lineares
 

Semelhante a Aula 4

Eda trabalho seleção.docx_0
Eda trabalho seleção.docx_0Eda trabalho seleção.docx_0
Eda trabalho seleção.docx_0bgsp1995
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De OrdenaçãoBrian Supra
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptssuserd654cb1
 
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
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Classificação de dados
Classificação de dadosClassificação de dados
Classificação de dadosFernando Vargas
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 
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
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
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
 
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
 
Metodos de ordenação final
Metodos de ordenação   finalMetodos de ordenação   final
Metodos de ordenação finalGabriel Malaquias
 
Sistemas de comunicação, digital, di.pdf
Sistemas de comunicação, digital, di.pdfSistemas de comunicação, digital, di.pdf
Sistemas de comunicação, digital, di.pdfBNBN31
 

Semelhante a Aula 4 (20)

Eda trabalho seleção.docx_0
Eda trabalho seleção.docx_0Eda trabalho seleção.docx_0
Eda trabalho seleção.docx_0
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Algorimos De Ordenação
Algorimos De OrdenaçãoAlgorimos De Ordenação
Algorimos De Ordenação
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
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
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Classificação de dados
Classificação de dadosClassificação de dados
Classificação de dados
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Cap09
Cap09Cap09
Cap09
 
Cap09
Cap09Cap09
Cap09
 
Aula 01
Aula 01Aula 01
Aula 01
 
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
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
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
 
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
 
Metodos de ordenação final
Metodos de ordenação   finalMetodos de ordenação   final
Metodos de ordenação final
 
Sistemas de comunicação, digital, di.pdf
Sistemas de comunicação, digital, di.pdfSistemas de comunicação, digital, di.pdf
Sistemas de comunicação, digital, di.pdf
 

Mais de Divani Barbosa (20)

Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface Grafica
 
Aula 21
Aula 21Aula 21
Aula 21
 
Aula 20
Aula 20Aula 20
Aula 20
 
Aula 19
Aula 19Aula 19
Aula 19
 
Aula 18
Aula 18Aula 18
Aula 18
 
Aula 17
Aula 17Aula 17
Aula 17
 
Aula 16
Aula 16Aula 16
Aula 16
 
Aula 15
Aula 15Aula 15
Aula 15
 
Aula14
Aula14Aula14
Aula14
 
Aula 13
Aula 13Aula 13
Aula 13
 
Aula 12
Aula 12Aula 12
Aula 12
 
Aula 11
Aula 11Aula 11
Aula 11
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aula 9
Aula 9Aula 9
Aula 9
 
Aula 8
Aula 8Aula 8
Aula 8
 
Aula 7
Aula 7 Aula 7
Aula 7
 
Aula 6
Aula 6Aula 6
Aula 6
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Aula 3
Aula 3Aula 3
Aula 3
 
Aula 2
Aula 2Aula 2
Aula 2
 

Aula 4

  • 1. Profa. Divani Barbosa Gavinier Aula 4 – parte 1 – Estrutura de Dados
  • 2. 2 Ordenação é o ato de se colocar os elementos de uma sequência de informações, ou dados, em uma ordem predefinida. Algoritmos a serem vistos:  BubbleSort  Seleção  Inserção  MergeSort  QuickSort Métodos Simples Métodos Eficientes Rápidos (menos da metade do tempo que os métodos simples)
  • 3. 3 Consiste em trocar o menor elemento de um vetor com o elemento posicionado no início do vetor, depois o segundo menor elemento para a segunda posição, e assim sucessivamente com os (n - 1) elementos restantes, até os últimos dois elementos. Exemplo: Considere o seguinte vetor: 13 7 5 1 4v 0 1 2 3 4  Verifico a primeira posição do vetor  Procuro qual o elemento menor nas posições superiores  Se existe menor que o atual faço a troca
  • 4. 4 Consiste em trocar o menor elemento de um vetor com o elemento posicionado no início do vetor, depois o segundo menor elemento para a segunda posição, e assim sucessivamente com os (n - 1) elementos restantes, até os últimos dois elementos. Exemplo: Considere o seguinte vetor: 13 7 5 1 4v 0 1 2 3 4 1 7 5 13 4 Passo 1 → troca (1<13)  Verifico a segunda posição do vetor  Procuro qual o elemento menor nas posições superiores  Se existe menor que o atual faço a troca
  • 5. 5 Consiste em trocar o menor elemento de um vetor com o elemento posicionado no início do vetor, depois o segundo menor elemento para a segunda posição, e assim sucessivamente com os (n - 1) elementos restantes, até os últimos dois elementos. Exemplo: Considere o seguinte vetor: 13 7 5 1 4v 0 1 2 3 4 1 7 5 13 4 1 4 5 13 7 Passo 1 → troca Passo 2 → troca (2<7)  Verifico a terceira posição do vetor  Procuro qual o elemento menor nas posições superiores  Se existe menor que o atual faço a troca
  • 6. 6 Consiste em trocar o menor elemento de um vetor com o elemento posicionado no início do vetor, depois o segundo menor elemento para a segunda posição, e assim sucessivamente com os (n - 1) elementos restantes, até os últimos dois elementos. Exemplo: Considere o seguinte vetor: 13 7 5 1 4v 0 1 2 3 4 1 7 5 13 4 1 4 5 13 7 1 4 5 13 7 Passo 1 → troca Passo 2 → troca Passo 3 → não troca
  • 7. 7 Consiste em trocar o menor elemento de um vetor com o elemento posicionado no início do vetor, depois o segundo menor elemento para a segunda posição, e assim sucessivamente com os (n - 1) elementos restantes, até os últimos dois elementos. Exemplo: Considere o seguinte vetor: 13 7 5 1 4v 0 1 2 3 4 1 7 5 13 4 1 4 5 13 7 1 4 5 13 7 1 4 5 7 13 Passo 1 → troca Passo 2 → troca Passo 3 → não troca Passo 4 → troca (7 < 13)
  • 8. public void selecao() { int min; for (int i = 0; i < n-1; i++) { min = i; for (int j = i+1; j < n; j++) if (v[j] < v[min]) min = j; troca(i, min); } } 8 private void troca(int um, int dois) { long temp = v[um]; v[um] = v[dois]; v[dois] = temp; } min é a posição do elemento mínimo laço responsável pela varredura de n–1 vezes Método responsável pela troca de elementos de um vetor do tipo long. min recebe a posição i Procura nas posições superiores a i o elemento menor que min caso encontre elemento menor que min: variável min recebe a posição desse elemento
  • 9. 9 Vantagens: Desvantagens: Ele é um algoritmo simples de ser implementado em comparação aos demais Ele é um dos mais lentos para vetores de tamanhos grandes Ele é mais veloz que o bubblesort na ordenação de vetores de tamanhos pequenos (Inserção é ainda mais veloz) Ele faz sempre n2 comparações, independente do vetor está ordenado ou não.
  • 10. 10 Inicialmente, ela ordena os dois primeiros elementos do vetor, em seguida, o algoritmo insere o terceiro elemento na sua posição ordenada com relação aos dois primeiros elementos, e assim por diante até que todo o vetor esteja ordenado. Exemplo 1: Considere o seguinte vetor:
  • 11. 49 67 33 96 21 33 58 74 49 67 33 96 21 33 58 74 0 1 2 3 4 5 6 7 V Exemplo: Considere o seguinte vetor:
  • 12. 49 67 33 96 21 33 58 7449 49 67 33 96 21 33 58 74V Passo: Primeiro elemento é passado 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 1
  • 13. 49 67 33 96 21 33 58 7449 49 67 49 67 33 96 21 33 58 74V Passo: Segundo elemento é passado em sua posição ordenada e assim por diante... 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 2
  • 14. 49 67 33 96 21 33 58 74 49 67 33 96 21 33 58 74V 49 49 67 33 49 67 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 3
  • 15. 49 67 33 96 21 33 58 74 49 67 33 96 21 33 58 74V 33 49 67 96 49 49 67 33 49 67 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Var. marcada 4
  • 16. 49 67 33 96 21 33 58 74 49 67 33 96 21 33 58 74V 21 33 49 67 96 33 49 67 96 49 49 67 33 49 67 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 5
  • 17. 49 67 33 96 21 33 58 74 49 67 33 96 21 33 58 74V 21 33 49 67 96 21 33 33 49 67 96 33 49 67 96 49 49 67 33 49 67 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 6
  • 18. 49 67 33 96 21 33 58 74 49 67 33 96 21 33 58 74V 21 33 49 67 96 21 33 33 49 67 96 21 33 33 49 58 67 96 33 49 67 96 49 49 67 33 49 67 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 7
  • 19. 49 67 33 96 21 33 58 74 21 33 49 67 96 21 33 33 49 67 96 21 33 33 49 58 67 96 21 33 33 49 58 67 74 96 49 67 33 96 21 33 58 74V 33 49 67 96 49 49 67 33 49 67 0 1 2 3 4 5 6 7 Exemplo: Considere o seguinte vetor: Variável marcada 8
  • 20. public void insercao() { int i, j; long temp; for (i=1; i < n; i++) { temp = v[i]; // variável marcada j = i; while ((j > 0) && (v[j-1] > temp)) { v[j] = v[j-1]; j = j - 1; } v[j] = temp; } } 20
  • 21. public void insercao() { int i, j; long temp; for (i=1; i < n; i++) { temp = v[i]; // variável marcada j = i; while ((j > 0) && (v[j-1] > temp)) { v[j] = v[j-1]; j = j - 1; } v[j] = temp; } } 21 laço responsável pela varredura do vetor temp recebe o conteúdo do item atual (posição i) Laço responsável pela movimentação dos outros itens em suas novas posições (ordenada) Inserção do item atual na sua posição ordenada conteúdo do item atual (variável temp)
  • 22. 22 Ordenação por seleção BubbleSort Ordenação por inserção Percorre todos elementos e ajusta no final Varrendo e apanhando itens Selecionando entre os próximos itens qual o menorUsa um método simples de ordenação por troca, porém sua eficiência é a menor entre os três. Admite melhoramentos, por isso, é muito usado como base para construção de métodos mais elaborados. Eficiente para vetores com pequena quantidade de dados Ineficiente para vetores com grande quantidades de dados É o melhor método para se usar quando o conteúdo está quase ordenado. Apresenta o melhor comportamento entre os três quanto ao número de movimentos. Portanto, é o ideal para vetores com grande quantidade de dados.
  • 23. 23 Demonstra como tempos de execução são afetados pelo numero de itens
  • 24. 24 Demonstra como tempos de execução são afetados pelo numero de itens Resumo do tempo de execução dos algoritmos: Média Pior Melhor Bolha O(n2) O(n2) O(n) Seleção O(n2) O(n2) O(n2) Inserção O(n2) O(n2) O(n)
  • 25. 25  Os algoritmos de ordenação vistos adotam um vetor como a estrutura de armazenamento de dados;  Ordenar envolve comparar as chaves de itens de dados no vetor e mover os itens até que eles estejam na ordem classificada;  Todos os algoritmos vistos até essa aula executam em tempo O(n2). Entretanto alguns podem ser mais rápidos que os outros;  A ordenação pelo método da bolha é a menos eficiente, porém o algoritmo mais simples;/  A ordenação por inserção é a mais usada das ordenações com tempo O(n2);  Nenhuma das ordenações vistas até essa aula requer mais do que uma variável temporária, além do vetor original.
  • 26. 26 2- O algoritmo pelo método da bolha alterna-se entre: a. Comparar e trocar b. Mover e Copiar c. Mover e Comparar d. Copiar e Comparar 1- Algoritmos de ordenação por computador são mais limitados que humanos no sentido de que: a. Humanos são melhores em inventar novos algoritmos. b. Computadores podem lidar apenas com uma quantidade fixa de dados c. Humanos sabem o que ordenar, ao que computadores precisam ser informados. d. Computadores podem comparar apenas duas coisas de cada vez
  • 27. 27 3- Verdadeiro ou Falso: Se houver n itens, a ordenação por Seleção fara exatamente n*n comparações. 4- Na ordenação por Inserção, a variável marcada descrita na aula corresponde a qual variável no algoritmo? a. i b. j c. temp d. v[j]
  • 28. 28 Escrever programas para resolver os projetos de programação ajuda a solidificar sua compreensão do material e demonstra como aplicar os conceitos da aula. 5- Considere que a ordenação para n inteiros números leve t segundos. Calcule o tempo de ordenação para cem, mil, dez mil e cem mil elementos para todos os algoritmos de ordenação vistos: bubblesort, seleção e inserção. Imprima na tela da seguinte forma: Obtenha valores aleatórios entre 0 e 500 para o vetor desordenado.
  • 29. 29 import java.util.Random; public class Aleatorios { public static void main(String[] args) { Random gerador = new Random(); //imprime sequência de 10 números inteiros aleatórios for (int i = 0; i < 10; i++) System.out.println(gerador.nextInt(101)); /* Como o parâmetro do método é 101, os valores gerados serão entre 0 e 100 */ } } Dica 1: Programa exemplo de como obter valores aleatórios entre 0 e 100. Dica 2: No desenvolvimento do programa não se esqueça de manter uma cópia do vetor desordenado gerado. Exemplo: for(i=0; i<n; i++) copia[i]=v[i]; Ordene somente a copia, não o vetor v.
  • 30. 30 Dica 3: Programa exemplo de como calcular o tempo em milissegundos em Java. public class Tempo { public static void main(String[] args) { long tempoInicio; // inicia contagem do tempo tempoInicio= System.currentTimeMillis(); // imprime sequência de 0 a 999 for (int i = 0; i < 1000; i++) System.out.print(i + " "); /* finaliza contagem do tempo e imprime na tela o tempo gasto para impressão da sequencia de 0 a 999 */ System.out.println("nTempo Total: " + (System.currentTimeMillis()-tempoInicio) + " milisegundos"); } }

Notas do Editor

  1. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  2. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  3. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  4. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  5. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  6. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  7. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  8. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  9. O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".