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");
}
}

Aula 4

  • 1.
    Profa. Divani BarbosaGavinier Aula 4 – parte 1 – Estrutura de Dados
  • 2.
    2 Ordenação é oato 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 trocaro 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 trocaro 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 trocaro 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 trocaro 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 trocaro 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 é umalgoritmo 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 ordenaos 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 3396 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 3396 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 3396 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 3396 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 3396 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 3396 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 3396 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 3396 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 3396 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çãopor 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 temposde execução são afetados pelo numero de itens
  • 24.
    24 Demonstra como temposde 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 algoritmosde 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 algoritmopelo 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 ouFalso: 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 pararesolver 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 classAleatorios { 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: Programaexemplo 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

  • #12 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #13 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #14 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #15 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #16 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #17 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #18 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #19 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".
  • #20 O termo técnico em inglês para ordenação é sorting, cuja tradução literal é "classificação".