SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
1
Métodos de Ordenação
Ordenação Interna
Ordenação por Seleção;
Ordenação por Inserção;
Ordenação por Troca (Bubblesort);
Prof. Yandre Maldonado e Gomes da Costa
Prof.YandreMaldonado-1
Ordenação Interna
Memória interna (primária) suficiente
para armazenar os registros de dados
durante o processo de ordenação;
Medidas de complexidade relevantes
em ordenação interna:
C(n), número de comparações entre
chaves;
M(n), número de movimentações de itens
no arquivo;
Prof.YandreMaldonado-2
Ordenação Interna
Considere os seguintes tipos para os algoritmos
descritos a seguir:
#define MAX 40
struct pessoa
{
char nome[30];
int idade;
};
pessoa cadastro[MAX];
int n_cad;
Prof.YandreMaldonado-3
2
Ordenação por Seleção
Um dos mais simples;
Princípio: selecione o menor elemento
do vetor e troque-o com o item que
está na primeira posição do vetor.
Repita estas duas operações com os n-1
itens restantes, depois com os n-2
itens, até que reste apenas um
elemento.
Prof.YandreMaldonado-4
Ordenação por Seleção
Exemplo:
Prof.YandreMaldonado-5
RONEDAI=6
ORNEDAI=5
ONREDAI=4
ONERDAI=3
ONEDRAI=2
ANEDROChaves Inicias:
654321
Algoritmo:
void ordena_selecao (void)
{
int i, j, min;
pessoa x;
for (i=0;i<=n_cad-2;i++)
{
min=i;
for (j=i+1;j<=n_cad-1;j++)
if (strcmp(cadastro[j].nome,cadastro[min].nome)<0) min=j;
x=cadastro[min];
cadastro[min]=cadastro[i];
cadastro[i]=x;
}
}
Prof.YandreMaldonado-6
Faz a troca
Seleciona o
menor
3
Ordenação por Seleção
Análise de complexidade:
C(n) = (n2/2) – (n/2)
M(n) = 3 (n-1)
Em condições normais, com chaves do
tamanho de uma palavra, este método
é bastante interessante para arquivos
com até 1000 registros;
Aspecto negativo: o fato de o arquivo já
estar parcialmente ordenado não reduz
em nada o custo da ordenação.
Prof.YandreMaldonado-7
Ordenação por Inserção
Neste método, a seqüência a ser ordenada é
varrida a partir da posição 2, e cada item
apanhado na seqüência é inserido no seu
lugar apropriado em relação aos itens
anteriores da seqüência;
A colocação do item no seu lugar apropriado
na seqüência destino é realizada movendo-se
os itens com chaves maiores para a direita e
então inserindo o item na posição deixada
vazia.
Prof.YandreMaldonado-8
Ordenação por Inserção
Exemplo:
Prof.YandreMaldonado-9
RONEDAI=6
ARONEDI=5
ANROEDI=4
ANERODI=3
ANEDROI=2
ANEDROChaves Inicias:
654321
4
Algoritmo:
void ordena_insercao (void)
{
int i, j;
pessoa x;
for (i=1;i<=n_cad-1;i++)
{
x=cadastro[i];
j=i-1;
while ((strcmp(x.nome,cadastro[j].nome)<0) && (j>=0))
{
cadastro[j+1]=cadastro[j]; //Empurra maiores para a direita
j=j-1;
}
cadastro[j+1]=x; //insere na posicao apropriada
}
}
Prof.YandreMaldonado-10
Ordenação por Inserção
O método de inserção é adequado para
os casos em que as informações já
estão “quase” ordenadas, pois neste
caso seu custo é muito baixo;
É também um bom método quando se
deseja adicionar uns poucos itens à
uma seqüência já ordenada.
Prof.YandreMaldonado-11
Ordenação por Troca
Este método permuta sistematicamente
pares de elementos que estão fora de
ordem até que não haja mais pares
não-ordenados;
Estratégia bolha, ou bubblesort:
consiste em “borbulhar” o maior
elemento para o fim da lista;
Prof.YandreMaldonado-12
5
Ordenação por Troca
Inicialmente, percorre-se a lista
comparando pares de elementos
consecutivos e trocando os que
estiverem fora de ordem. Nesta
primeira varredura, o maior elemento é
“empurrado” para o fim da lista;
Na segunda varredura, o segundo maior
elemento será empurrado para a
penúltima posição, e assim por diante;
Prof.YandreMaldonado-13Prof.YandreMaldonado-14
Ordenação por Troca
Exemplo:
RANEDOMaior elemento no final
ARNEDOTroca 5 e 6
ANREDOTroca 4 e 5
ANERDOTroca 3 e 4
ANEDROTroca 2 e 3
ANEDRONão troca
654321Varredura 1
Prof.YandreMaldonado-15
Ordenação por Troca
Exemplo (continuação):
ROANEDSegundo maior elemento “empurrado”
para a penúltima posição
RAONEDTroca 4 e 5
RANOEDTroca 3 e 4
RANEODTroca 2 e 3
RANEDOTroca 1 e 2
654321Varredura 2
6
Ordenação por Troca
Para uma lista de tamanho n, são
necessárias n-1 varreduras, pois cada
varredura leva um elemento para a sua
posição definitiva no fim da sublista. O
menor elemento de todos vai “sobrar” na
primeira posição;
Pior caso: quando a lista está em ordem
invertida, neste caso o número de trocas é
igual a (n-1)+(n-2)+(n-3)+...+1;
Prof.YandreMaldonado-16
Algoritmo:
void ordena_troca (void)
{
int i, j;
pessoa x;
for (i=0;i<=n_cad-2;i++) //controla qual é a varredura
for (j=0;j<=(n_cad-2)-i;j++) //faz a varredura
if (strcmp(cadastro[j+1].nome,cadastro[j].nome)<0)
{
x=cadastro[j];
cadastro[j]=cadastro[j+1]; //troca
cadastro[j+1]=x;
}
}
Prof.YandreMaldonado-17
Ordenação Interna
Bibliografia recomendada:
Ziviani, Nivio. Projeto de Algoritmos,
Editora Pioneira;
Salvetti, Dirceu Douglas & Barbosa, Lisbete
Madsen. Algoritmos, Makron Books;
Wirth, Niklaus. Algortimos e Estruturas de
Dados, Editora PHB;
Prof.YandreMaldonado-18

Mais conteúdo relacionado

Destaque

Um estudo sobre recursividade e suas aplicações
Um estudo sobre recursividade e suas aplicaçõesUm estudo sobre recursividade e suas aplicações
Um estudo sobre recursividade e suas aplicaçõesBruno Oliveira
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Recursividade em java
Recursividade em javaRecursividade em java
Recursividade em javaKevenLeone
 
Aula 02 - Classes em C++ ( Parte 1 )
Aula 02 - Classes em C++ ( Parte 1 )Aula 02 - Classes em C++ ( Parte 1 )
Aula 02 - Classes em C++ ( Parte 1 )PeslPinguim
 
Aula 03 - Classes em C++ ( Parte 2 )
Aula 03 - Classes em C++ ( Parte 2 )Aula 03 - Classes em C++ ( Parte 2 )
Aula 03 - Classes em C++ ( Parte 2 )PeslPinguim
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaRegis Magalhães
 
POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)
POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)
POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)Marcello Thiry
 
Apresentação1
Apresentação1Apresentação1
Apresentação1dallmolin
 
Algoritmos e Técnicas de Programação - Aula 04
Algoritmos e Técnicas de Programação - Aula 04Algoritmos e Técnicas de Programação - Aula 04
Algoritmos e Técnicas de Programação - Aula 04thomasdacosta
 
Aula 04 - Templates e Operators
Aula 04 - Templates e OperatorsAula 04 - Templates e Operators
Aula 04 - Templates e OperatorsPeslPinguim
 

Destaque (20)

Um estudo sobre recursividade e suas aplicações
Um estudo sobre recursividade e suas aplicaçõesUm estudo sobre recursividade e suas aplicações
Um estudo sobre recursividade e suas aplicações
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Recursividade em java
Recursividade em javaRecursividade em java
Recursividade em java
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Ordenação por inserção
Ordenação por inserçãoOrdenação por inserção
Ordenação por inserção
 
Aula 02 - Classes em C++ ( Parte 1 )
Aula 02 - Classes em C++ ( Parte 1 )Aula 02 - Classes em C++ ( Parte 1 )
Aula 02 - Classes em C++ ( Parte 1 )
 
Aula 03 - Classes em C++ ( Parte 2 )
Aula 03 - Classes em C++ ( Parte 2 )Aula 03 - Classes em C++ ( Parte 2 )
Aula 03 - Classes em C++ ( Parte 2 )
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
Métodos de Ordenação
Métodos de Ordenação Métodos de Ordenação
Métodos de Ordenação
 
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
Aulas TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
 
Java collections-basic
Java collections-basicJava collections-basic
Java collections-basic
 
POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)
POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)
POO - Unidade 1 (parte 2) - Orientação a Objetos com Java e UML (versão 4)
 
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)
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Algoritmos e Técnicas de Programação - Aula 04
Algoritmos e Técnicas de Programação - Aula 04Algoritmos e Técnicas de Programação - Aula 04
Algoritmos e Técnicas de Programação - Aula 04
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Ed1
Ed1Ed1
Ed1
 
Aula 04 - Templates e Operators
Aula 04 - Templates e OperatorsAula 04 - Templates e Operators
Aula 04 - Templates e Operators
 

Ordenacao mini

  • 1. 1 Métodos de Ordenação Ordenação Interna Ordenação por Seleção; Ordenação por Inserção; Ordenação por Troca (Bubblesort); Prof. Yandre Maldonado e Gomes da Costa Prof.YandreMaldonado-1 Ordenação Interna Memória interna (primária) suficiente para armazenar os registros de dados durante o processo de ordenação; Medidas de complexidade relevantes em ordenação interna: C(n), número de comparações entre chaves; M(n), número de movimentações de itens no arquivo; Prof.YandreMaldonado-2 Ordenação Interna Considere os seguintes tipos para os algoritmos descritos a seguir: #define MAX 40 struct pessoa { char nome[30]; int idade; }; pessoa cadastro[MAX]; int n_cad; Prof.YandreMaldonado-3
  • 2. 2 Ordenação por Seleção Um dos mais simples; Princípio: selecione o menor elemento do vetor e troque-o com o item que está na primeira posição do vetor. Repita estas duas operações com os n-1 itens restantes, depois com os n-2 itens, até que reste apenas um elemento. Prof.YandreMaldonado-4 Ordenação por Seleção Exemplo: Prof.YandreMaldonado-5 RONEDAI=6 ORNEDAI=5 ONREDAI=4 ONERDAI=3 ONEDRAI=2 ANEDROChaves Inicias: 654321 Algoritmo: void ordena_selecao (void) { int i, j, min; pessoa x; for (i=0;i<=n_cad-2;i++) { min=i; for (j=i+1;j<=n_cad-1;j++) if (strcmp(cadastro[j].nome,cadastro[min].nome)<0) min=j; x=cadastro[min]; cadastro[min]=cadastro[i]; cadastro[i]=x; } } Prof.YandreMaldonado-6 Faz a troca Seleciona o menor
  • 3. 3 Ordenação por Seleção Análise de complexidade: C(n) = (n2/2) – (n/2) M(n) = 3 (n-1) Em condições normais, com chaves do tamanho de uma palavra, este método é bastante interessante para arquivos com até 1000 registros; Aspecto negativo: o fato de o arquivo já estar parcialmente ordenado não reduz em nada o custo da ordenação. Prof.YandreMaldonado-7 Ordenação por Inserção Neste método, a seqüência a ser ordenada é varrida a partir da posição 2, e cada item apanhado na seqüência é inserido no seu lugar apropriado em relação aos itens anteriores da seqüência; A colocação do item no seu lugar apropriado na seqüência destino é realizada movendo-se os itens com chaves maiores para a direita e então inserindo o item na posição deixada vazia. Prof.YandreMaldonado-8 Ordenação por Inserção Exemplo: Prof.YandreMaldonado-9 RONEDAI=6 ARONEDI=5 ANROEDI=4 ANERODI=3 ANEDROI=2 ANEDROChaves Inicias: 654321
  • 4. 4 Algoritmo: void ordena_insercao (void) { int i, j; pessoa x; for (i=1;i<=n_cad-1;i++) { x=cadastro[i]; j=i-1; while ((strcmp(x.nome,cadastro[j].nome)<0) && (j>=0)) { cadastro[j+1]=cadastro[j]; //Empurra maiores para a direita j=j-1; } cadastro[j+1]=x; //insere na posicao apropriada } } Prof.YandreMaldonado-10 Ordenação por Inserção O método de inserção é adequado para os casos em que as informações já estão “quase” ordenadas, pois neste caso seu custo é muito baixo; É também um bom método quando se deseja adicionar uns poucos itens à uma seqüência já ordenada. Prof.YandreMaldonado-11 Ordenação por Troca Este método permuta sistematicamente pares de elementos que estão fora de ordem até que não haja mais pares não-ordenados; Estratégia bolha, ou bubblesort: consiste em “borbulhar” o maior elemento para o fim da lista; Prof.YandreMaldonado-12
  • 5. 5 Ordenação por Troca Inicialmente, percorre-se a lista comparando pares de elementos consecutivos e trocando os que estiverem fora de ordem. Nesta primeira varredura, o maior elemento é “empurrado” para o fim da lista; Na segunda varredura, o segundo maior elemento será empurrado para a penúltima posição, e assim por diante; Prof.YandreMaldonado-13Prof.YandreMaldonado-14 Ordenação por Troca Exemplo: RANEDOMaior elemento no final ARNEDOTroca 5 e 6 ANREDOTroca 4 e 5 ANERDOTroca 3 e 4 ANEDROTroca 2 e 3 ANEDRONão troca 654321Varredura 1 Prof.YandreMaldonado-15 Ordenação por Troca Exemplo (continuação): ROANEDSegundo maior elemento “empurrado” para a penúltima posição RAONEDTroca 4 e 5 RANOEDTroca 3 e 4 RANEODTroca 2 e 3 RANEDOTroca 1 e 2 654321Varredura 2
  • 6. 6 Ordenação por Troca Para uma lista de tamanho n, são necessárias n-1 varreduras, pois cada varredura leva um elemento para a sua posição definitiva no fim da sublista. O menor elemento de todos vai “sobrar” na primeira posição; Pior caso: quando a lista está em ordem invertida, neste caso o número de trocas é igual a (n-1)+(n-2)+(n-3)+...+1; Prof.YandreMaldonado-16 Algoritmo: void ordena_troca (void) { int i, j; pessoa x; for (i=0;i<=n_cad-2;i++) //controla qual é a varredura for (j=0;j<=(n_cad-2)-i;j++) //faz a varredura if (strcmp(cadastro[j+1].nome,cadastro[j].nome)<0) { x=cadastro[j]; cadastro[j]=cadastro[j+1]; //troca cadastro[j+1]=x; } } Prof.YandreMaldonado-17 Ordenação Interna Bibliografia recomendada: Ziviani, Nivio. Projeto de Algoritmos, Editora Pioneira; Salvetti, Dirceu Douglas & Barbosa, Lisbete Madsen. Algoritmos, Makron Books; Wirth, Niklaus. Algortimos e Estruturas de Dados, Editora PHB; Prof.YandreMaldonado-18