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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

ordenacao shellsort quicksort em C

  • 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 1M´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 ShellSort Proposto por Shell em 1959; Silvio Luiz Bragatto Boss UTFPR M´etodos de Ordena¸c˜ao LATEX
  • 4.
    M´etodos de Ordena¸c˜ao ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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 ShellSort 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