1. M´etodos de Ordena¸c˜ao: ShellSort e QuickSort
Professor:
Silvio Luiz Bragatto Boss
e-mail:
silvioboss@utfpr.edu.br
Universidade Tecnol´ogica Federal do Paran´a - UTFPR
Coordenac¸˜ao de Inform´atica - COINF
Curso de Engenharia de Computac¸˜ao
Disciplina de Estrutura de Dados I
2. M´etodos de Ordena¸c˜ao
Sum´ario
1 M´etodos de Ordena¸c˜ao
Shell Sort
Quick Sort
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
3. M´etodos de Ordena¸c˜ao
Shell Sort
Proposto por Shell em 1959;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
4. M´etodos de Ordena¸c˜ao
Shell Sort
Proposto por Shell em 1959;
´E uma extens˜ao do algoritmo de ordena¸c˜ao por inser¸c˜ao;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
5. M´etodos de Ordena¸c˜ao
Shell Sort
Proposto por Shell em 1959;
´E uma extens˜ao do algoritmo de ordena¸c˜ao por inser¸c˜ao;
Problema com o algoritmo de ordena¸c˜ao por inser¸c˜ao:
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
6. M´etodos de Ordena¸c˜ao
Shell Sort
Proposto por Shell em 1959;
´E uma extens˜ao do algoritmo de ordena¸c˜ao por inser¸c˜ao;
Problema com o algoritmo de ordena¸c˜ao por inser¸c˜ao:
Troca itens adjacentes para determinar o ponto de inser¸c˜ao;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
7. M´etodos de Ordena¸c˜ao
Shell Sort
Proposto por Shell em 1959;
´E uma extens˜ao do algoritmo de ordena¸c˜ao por inser¸c˜ao;
Problema com o algoritmo de ordena¸c˜ao por inser¸c˜ao:
Troca itens adjacentes para determinar o ponto de inser¸c˜ao;
S˜ao efetuadas n-1 compara¸c˜oes e movimenta¸c˜oes quando o
menor item est´a na posi¸c˜ao mais `a direita no vetor.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
8. M´etodos de Ordena¸c˜ao
Shell Sort
Proposto por Shell em 1959;
´E uma extens˜ao do algoritmo de ordena¸c˜ao por inser¸c˜ao;
Problema com o algoritmo de ordena¸c˜ao por inser¸c˜ao:
Troca itens adjacentes para determinar o ponto de inser¸c˜ao;
S˜ao efetuadas n-1 compara¸c˜oes e movimenta¸c˜oes quando o
menor item est´a na posi¸c˜ao mais `a direita no vetor.
O m´etodo de Shell contorna este problema permitindo trocas
de registros distantes um do outro.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
9. M´etodos de Ordena¸c˜ao
Shell Sort
Ao inv´es de possuir apenas uma lista, no shellsort existem
v´arias listas;
Assumindo que existe uma sequencia de n´umeros 12 43 1 6
56 23 52 9.
Esta sequencia (lista) ser´a quebrada em v´arias listas baseada
num “pulo” de um n´umero para outro.
Por exemplo: com pulo valendo 4, teremos os n´umeros
selecionados de 4 em quatro posi¸c˜oes.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
10. M´etodos de Ordena¸c˜ao
Shell Sort
Como escolher o pulo ?
O valor escolhido para o “pulo” muda os valores obtidos na
sequencia e tamb´em ir´a impactar na quantidade de testes de o
algoritmo precisa fazer para encontrar a solu¸c˜ao final;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
11. M´etodos de Ordena¸c˜ao
Shell Sort
Como escolher o pulo ?
O valor escolhido para o “pulo” muda os valores obtidos na
sequencia e tamb´em ir´a impactar na quantidade de testes de o
algoritmo precisa fazer para encontrar a solu¸c˜ao final;
Existem alguns estudos na literatura para obter uma solu¸c˜ao
´otima do algoritmo em fun¸c˜ao da escolha do valor de “pulo”;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
12. M´etodos de Ordena¸c˜ao
Shell Sort
Como escolher o pulo ?
O valor escolhido para o “pulo” muda os valores obtidos na
sequencia e tamb´em ir´a impactar na quantidade de testes de o
algoritmo precisa fazer para encontrar a solu¸c˜ao final;
Existem alguns estudos na literatura para obter uma solu¸c˜ao
´otima do algoritmo em fun¸c˜ao da escolha do valor de “pulo”;
No nosso estudo, utilizaremos uma forma f´acil de escolher o
valor de pulo e que ´e claro, n˜ao ser a melhor solu¸c˜ao poss´ıvel;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
13. M´etodos de Ordena¸c˜ao
Shell Sort
Como escolher o pulo ?
O valor escolhido para o “pulo” muda os valores obtidos na
sequencia e tamb´em ir´a impactar na quantidade de testes de o
algoritmo precisa fazer para encontrar a solu¸c˜ao final;
Existem alguns estudos na literatura para obter uma solu¸c˜ao
´otima do algoritmo em fun¸c˜ao da escolha do valor de “pulo”;
No nosso estudo, utilizaremos uma forma f´acil de escolher o
valor de pulo e que ´e claro, n˜ao ser a melhor solu¸c˜ao poss´ıvel;
Em virtude da quantidade de compara¸c˜oes e trocas de
elementos ser uma fun¸c˜ao da escolha deste n´umero, a
complexidade deste m´etodo ´e dif´ıcil de representar;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
14. M´etodos de Ordena¸c˜ao
Shell Sort
Como escolher o pulo ?
O valor escolhido para o “pulo” muda os valores obtidos na
sequencia e tamb´em ir´a impactar na quantidade de testes de o
algoritmo precisa fazer para encontrar a solu¸c˜ao final;
Existem alguns estudos na literatura para obter uma solu¸c˜ao
´otima do algoritmo em fun¸c˜ao da escolha do valor de “pulo”;
No nosso estudo, utilizaremos uma forma f´acil de escolher o
valor de pulo e que ´e claro, n˜ao ser a melhor solu¸c˜ao poss´ıvel;
Em virtude da quantidade de compara¸c˜oes e trocas de
elementos ser uma fun¸c˜ao da escolha deste n´umero, a
complexidade deste m´etodo ´e dif´ıcil de representar;
Sabe-se que a complexidade, no pior caso, para a pior escolha
de valor de “pulo” ser´a O(n2).
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
15. M´etodos de Ordena¸c˜ao
Shell Sort
void shellsort (int a[], int n) {
int i, j, k, h, v;
h=1;
do {
h = 3*h+1;
} while(h < n);
do {
h =h / 3;
for (i=h; i<n; i++) {
v=a[i];
j=i;
while (j>=h && a[j-h]>v){
a[j]=a[j-h];
j=j-h; }
a[j]=v; }
}while (h >1);
}
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
16. M´etodos de Ordena¸c˜ao
Quicksort – Ordena¸c˜ao R´apida
M´etodo proposto por C. A. Hoare, em 1962, na Universidade
de Moscou;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
17. M´etodos de Ordena¸c˜ao
Quicksort – Ordena¸c˜ao R´apida
M´etodo proposto por C. A. Hoare, em 1962, na Universidade
de Moscou;
´E considerado o m´etodo de ordena¸c˜ao mais eficiente at´e hoje;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
18. M´etodos de Ordena¸c˜ao
Quicksort – Ordena¸c˜ao R´apida
M´etodo proposto por C. A. Hoare, em 1962, na Universidade
de Moscou;
´E considerado o m´etodo de ordena¸c˜ao mais eficiente at´e hoje;
Utiliza a estrat´egia “dividir para conquistar”;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
19. M´etodos de Ordena¸c˜ao
Quicksort – Ordena¸c˜ao R´apida
M´etodo proposto por C. A. Hoare, em 1962, na Universidade
de Moscou;
´E considerado o m´etodo de ordena¸c˜ao mais eficiente at´e hoje;
Utiliza a estrat´egia “dividir para conquistar”;
Dividir um problema em subproblemas menores e combinar as
solu¸c˜oes a fim de se obter a solu¸c˜ao do problema original;
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
20. M´etodos de Ordena¸c˜ao
Quicksort – Ordena¸c˜ao R´apida
O m´etodo consiste em:
Escolher um pivˆo inicial x;
Colocar todos itens com chave menor que a de x `a esquerda
de x, formando uma sequˆencia S1;
Colocar todos itens com chave maior que a de x `a direita de x,
formando uma sequˆencia S2;
Isto feito, o mesmo processo ´e aplicado `as sequˆencias S1 e S2,
que por sua vez produzir˜ao novos segmentos;
O processo deve ser aplicado sucessivamente `as sequˆencias
enquanto elas tiverem tamanho 1.
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX
21. M´etodos de Ordena¸c˜ao
Quicksort – Ordena¸c˜ao R´apida
void quickSort(int vet[], int min, int max){
if(min >= max) //array ordenado
return;
int i = min; j = max;
int pivo = vet[(i+j)/2]; // valor do elemento central
do{ //Dividir em duas partes
while(vet[i] < pivo) i++;
while(vet[j] > pivo) j--;
if(i<=j){
if(vet[i] != vet[j])
troca(&vet[i],&vet[j]);
i++;
j--
}
}while(i<=j);
quickSort(vet,min,j); //ordenar parte esquerda
quickSort(vet,i,max); //ordenar parte direita
}
Silvio Luiz Bragatto Boss UTFPR
M´etodos de Ordena¸c˜ao LATEX