You are on page 1of 12

Ordenao

Ordenar: rearranjar um conjunto de


objetos em uma ordem ascendente ou
descendente
Objetivo: Facilitar a posterior recuperao
de itens no conjunto ordenado
A maioria dos mtodos de ordenao
baseada em comparaes das chaves
Interna: Todo o conjunto a ser ordenado
pode ser alocado na memria interna do
computador
Externa: Envolve arquivos compostos por
um nmero de registros que maior do
que a memria interna do computador
pode armazenar
Ordenao
Fatores crticos nos mtodos
de ordenao:
Eficincia
nmero de comparaes
nmero de trocas
Memria extra utilizada
nenhuma - ordenam na prpria
estrutura
usam listas de ponteiros
usam cpia da estrutura a ser
ordenada
Caracterstica importante: estabilidade
Ordenao
Um mtodo estvel se preserva a ordem
relativa de chaves iguais de um arquivo
Exemplo: reordenao da lista alfabtica de
funcionrios pelo campo salrio: um mtodo
estvel produzir uma lista na qual os
funcionrios com mesmo salrio aparecero em
ordem alfabtica
Mtodos Simples
Bubblesort (mtodo da bolha) Bubblesort (mtodo da bolha)
Seleo
Insero
Mtodos Eficientes
Shellsort
Quicksort
Heapsort
Ordenao BubbleSort original
void BubbleSort(int A[], int n)
{
int i, j, temp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(A[j] > A[j+1])
{
temp = A[j]; temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
}
}
}
}
Ordenao BubbleSort adap. 1
void BubbleSort(int A[], int n)
{
int i, temp, flag=0;
while(flag==0)
{
flag = 1;
for(i=0;i<n-1;i++)
{
if(A[i] > A[i+1])
{{
temp = A[i];
A[i] = A[i+1];
A[i+1] = temp;
flag=0;
}
}
}
}
Ordenao BubbleSort adap. 2
void BubbleSort(int A[], int n)
{
int i, j, temp, cont;
cont = n-1;
for(i=0;i<n-1;i++)
{
for(j=0;j<cont;j++)
{
if(A[j] > A[j+1])
{{
temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;
}
}
cont--;
}
}
Ordenao - Seleo
Funcionamento
Selecione o menor item do vetor
Troque-o com o item que est na
primeira posio do vetor primeira posio do vetor
Repita a operao anterior para
os n-1 itens restantes, depois
para os n-2, at que reste apenas
um elemento
Ordenao - Seleo
void selecao (int A[], int n)
{
int i, j, min, aux;
for (i=0 ; i < n-1; i++)
{
min = i;
for (j= i+1; j < n; j++)
if (A[j] < A[min])
min = j; min = j;
aux = A[min];
A[min] = A[i];
A[i] = aux;
}
}
Ordenao - Seleo
Vantagens:
simples
Pequeno nmero de movimentao
de registros
Indicado para arquivos com registros
grandes grandes
Desvantagens:
Custo quadrtico
No estvel
No sensvel ordenao inicial
Indicado para arquivos pequenos
Ordenao - Insero
Funcionamento:
similar ao utilizado para organizar
cartas de baralho
em cada passo, a partir de i= 2, o
i-simo item da seqncia fonte
transferido para seu lugar transferido para seu lugar
apropriado
Ordenao - Insero
void Insercao (int A[], int n)
{
int i, j, v;
for (i= 1; i < n; i++){
v = A[i];
j= i;
while (j>0 && A[j-1] > v)
{
A[j] = A[j-1];
j--;
}}
A[j] = v;
}
}
Ordenao - Insero
Vantagens:
simples
estvel
O tempo linear quando o arquivo
j est ordenado
Indicado quando se deseja acrescentar
poucos itens a um arquivo j ordenado
Desvantagens:
Custo quadrtico
Grande nmero de movimentao
de registros

You might also like