Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação de Computadores II
Algoritmos de ordenação
6 de maio de 2014
Slide 1/1
UNIVERSIDADE FEDERAL DE OURO PRETO ICEB - DECOM
Recursão
• Muitos problemas computacionais tem a propriedade de que
cada instância do problema contém uma instância menor do
problema.
QuickSort
• Algoritmo de ordenação eficiente que tem como princı́pio de
dividir para conquistar. É um problema naturalmente recursivo.
QuickSort
• Para ordenar, o algoritmo QuickSort seleciona um elemento no
vetor e o chama de pivo. Esse pivo será utilizado para rearranjar
o vetor, mantendo os elementos menores do que ele a sua
esquerda, e os elementos maiores do que ele a sua direita.
Implementação QuickSort
void q u i c k S o r t ( int ∗ v e t o r , int tamanho ) {
p a r t i c i o n a ( v e t o r , 0 , tamanho −1) ;
}
do{
while ( v e t o r [ i ] < p i v o ) i ++;
while ( v e t o r [ j ] > p i v o ) j −−;
if ( i <= j ) {
aux = v e t o r [ i ] ;
vetor [ i ] = vetor [ j ] ;
v e t o r [ j ] = aux ;
i ++; j −−;
}
}while ( i <= j ) ;
if ( i n i c i o < j )
p a r t i c i o n a ( vetor , i n i c i o , j ) ;
if ( i < f i m )
p a r t i c i o n a ( vetor , i , fim ) ;
}
Prof. Maurı́cio José da Silva — Programação de Computadores II
Slide 5/1
UNIVERSIDADE FEDERAL DE OURO PRETO ICEB - DECOM
MergeSort
• Algoritmo de ordenação eficiente também baseado no princı́pio
de dividir para conquistar.
• Dividir o vetor ao meio e fazer uma nova chamada para cada parte
do vetor, quando o vetor tiver tamanho de 1 elemento ele está
naturalmente ordenado;
Implementação MergeSort
d i v i d e ( v e t o r , 0 , tamanho −1) ;
}
int meio = ( f i m + i n i c i o ) / 2 ;
if ( i n i c i o < f i m ) {
d i v i d e ( v e t o r , i n i c i o , meio ) ;
d i v i d e ( v e t o r , meio +1 , f i m ) ;
i n t e r c a l a ( v e t o r , i n i c i o , meio , f i m ) ;
}
}
Implementação MergeSort
void i n t e r c a l a ( int ∗ v e t o r , int i n i c i o , int meio , int f i m ) {
int ∗aux , i , j , k ;
aux = new int [ fim − i n i c i o + 1 ] ;
i = inicio ;
j = meio + 1 ;
k = 0;
while ( j <= f i m )
aux [ k ++] = v e t o r [ j + + ] ;
Ordenação:
Ordem de complexidade
Método In Situ Estável
Pior Caso Caso Médio Melhor Caso
BubbleSort
SelectionSort
InsertionSort
QuickSort
MergeSort
Pesquisa:
Ordem de complexidade
Método
Pior Caso Caso Médio Melhor Caso
Pesquisa Sequencial
Pesquisa Binária