SlideShare uma empresa Scribd logo
1 de 5
Baixar para ler offline
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS
                         CAMPUS SÃO JOÃO EVANGELISTA




        Exercícios de
Algoritmos e Estrutura de Dados



Assunto: Lista de Exercícios 6




Componentes: Wárlley Júnio Andrade




Curso: Superior em Sistemas de Informação
Série/Turma: BSI111A
Professor: Bruno Toledo




                                            São João Evangelista, Maio de 2012.
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS
                            CAMPUS SÃO JOÃO EVANGELISTA



1. Qual a ideia central do Quicksort?
 O Quicksort utiliza o conceito de divisão e conquista, ou seja, dividir o problema grande em
 subproblemas para a resolução, para isso ele utiliza a recursividade para que ele possa dividir o
 problema.
 1 primeira parte do algoritmo seria encontra o pivô, o pivô nada mais é que a soma dos índices
 externos do vetor divididos por 2 , ou seja é o índice médio do vetor.
 2 A principio o algoritmo separa os elementos maiores que o pivô para a direita e os elementos
 menores que o pivô para a esquerda pois vai ser com o pivô que ele vai comparar cada elemento
 para colocá-lo na ordem certa.

2. Descreva a utilidade da Partição do método Quicksort?

A partição tem a função de rearranjar o vetor por meio da escolha de um pivô, de tal forma que
ao final o vetor estará particionado com uma parte esquerda com todos os elementos anteriores ao
pivô menores que ele, e outra parte onde todos os elementos posteriores ao pivô sejam maiores
que ele.

3. Qual(ais) a(s) diferença(s) entre o pior caso e o melhor caso do método Quicksort?

Pior caso: C(n) = O (n2)
    O pior caso ocorre quando, sistematicamente, o pivô é escolhido como sendo um dos
        extremos de um arquivo já ordenado.
    Isto faz com que o procedimento Ordena seja chamado recursivamente n vezes,
        eliminando apenas um item em cada chamada.
Melhor caso:
    C(n) = 2C(n/2) + n = n log n
    Esta situação ocorre quando cada partição divide o arquivo em duas partes iguais.

4. Quais as vantagens do Quicksort?
É extremamente eficiente para ordenar arquivos de dados.
Necessita de apenas uma pequena pilha como memória auxiliar.
Requer cerca de n log n comparações em média para ordenar n itens.


5. Quais as desvantagens do Quicksort?
Tem um pior caso O(n2) comparações.
Sua implementação é muito delicada e difícil:
Um pequeno engano pode levar a efeitos inesperados para algumas entradas de dados.
O método não é estável.

6. Explique o funcionamento do algoritmo abaixo:
Int partição (int x[], int p, int r)
{
 Int pivo, I,j; // declaração das variáveis locais
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS
                             CAMPUS SÃO JOÃO EVANGELISTA


Pivo =x[(p+r)/2]; // aqui é realizado o calculo para achar o pivô
I = p – 1;          // i percorre da esquerda para direita
J = r +1;            // j percorre da direita para esquerda
While(i < j)              // repetição enquanto o extremo i for menor que o j
{
 Do
   {
     J = j – 1; // o índice que aponta para valor que vai ser comparado e percorrido da direita para a
esquerda ate chegar no pivô para realizar a ordenação

 }
While (x[j] > pivô); // enquanto o vetor j for maior que o pivô, o vetor é percorrido

Do
  {
    I = I +1; // o índice que aponta para o valor que vai ser percorrido da esquerda para a direita ate
chegar no pivô para realizar a ordenação
  }
While (x[i] < pivo); enquanto o vetor i for menor que o pivô, vai percorrendo o vetor
If (I < j)
    Troca (x, I, j); // aqui é realizada a troca de valores na função troca
}
    Return j;
}

7. Utilizando o método de ordenação Quicksort onde o pivô será o valor central, ordene o
vetor com os valores: 3, 8, 9, 15, 12, 10, 1, 17, 20, 25.
0          1         2         3              4       5     6    7         8         9
3         8        9          15        12         10     1     17       20        25
Primeira partição:
 0          1        2         3              4       5     6    7         8         9
3         8        9          1         10         12     15    17       20        25
Segunda partição:
0          1         2         3              4
3         8        1          9         10

Terceira partição:
0                      1              2
3               1               8

Quarta partição:

0                      1              2
1               3               8
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS
                                       CAMPUS SÃO JOÃO EVANGELISTA


0           1                   2          3          4      5        6         7          8         9
1          3              8               9      10        12        15        17        20        25

Quinta partição:
                                                             5        6          7          8         9
                                                       12        15          17         20         25
                                                      Caso especial: Pivô já está na posição correta
Final:
0           1                   2          3          4      5        6         7          8         9
1          3              8               9      10        12        15        17        20        25


8. Utilizando o algoritmo em C do Quicksort, cujo pivô é o valor central do vetor, faça um
código onde peça o usuário para digitar 5 valores de um vetor e retorne a ordenação de
forma decrescente


#include <stdio.h>
#include <stdlib.h>
int quick(int v[],int ini, int fim)
{
 int i,f,pivo,aux;
 i=ini;
 f=fim;
 pivo=v[(ini+fim)/2];

         while(i<f)
     {
                                while (v[i]> pivo) //v[i]<pivo separa os elementos < pivo para a esquerda
            {
                              i++;
                            }
                    while (v[f]< pivo) //v[i]>pivo separa os elementos > pivo para a esquerda
           {
                         f--;
                    }
                                    if (i<=f)
                {
                        aux = v[i];
                             v[i] = v[f];
                             v[f] = aux;
                        i++;
                             f--;
                                  }
            }
         if (f > ini)
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS
                            CAMPUS SÃO JOÃO EVANGELISTA


     {
         quick(v,ini,f);
         }
         if (i < fim)
     {
         quick (v,i,fim);
            }
}
int main()
{
 int vetor[5];
 int i;
 printf(" -------- entre com o vetor desordenado: ---------nn");
 for(i = 0; i<5; i++)
  {
    printf("valor da posicao %d: ",i);
    scanf("%d",&vetor[i]);
  }
  printf("n");
  printf("vetor original:");
  for(i = 0;i<5;i++)
  printf(" %d",vetor[i]);
  printf("nn");
 quick(vetor,0,4);
  printf("vetor ordenado:");
 for(i=0;i<5;i++)
 printf(" %d", vetor[i]);
 printf("nn");
 system("pause");
}

Mais conteúdo relacionado

Semelhante a Lista de exercicio 6

EDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfEDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfSimoneSantos16595
 
Operações básicas da matemática
Operações básicas da matemáticaOperações básicas da matemática
Operações básicas da matemáticaEdiclei Oliveira
 
Aplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic SortAplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic SortVinicius Coelho
 
Tutorial aed iii 004 - algoritmo de ordenação quicksort
Tutorial aed iii   004 - algoritmo de ordenação quicksortTutorial aed iii   004 - algoritmo de ordenação quicksort
Tutorial aed iii 004 - algoritmo de ordenação quicksortFlávio Freitas
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoLenon Fachiano
 
Herança e_vetores.pdf_
 Herança e_vetores.pdf_ Herança e_vetores.pdf_
Herança e_vetores.pdf_Daniel Rocha
 
Laboratório de Algoritmos Avançados: Busca Ternária
Laboratório de Algoritmos Avançados: Busca TernáriaLaboratório de Algoritmos Avançados: Busca Ternária
Laboratório de Algoritmos Avançados: Busca TernáriaNathan Hartmann
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble SortCálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble SortJohnnatan Messias
 
Análise de Viga através de NX Nastran e Matlab (Galerkin)
Análise de Viga através de NX Nastran e Matlab (Galerkin)Análise de Viga através de NX Nastran e Matlab (Galerkin)
Análise de Viga através de NX Nastran e Matlab (Galerkin)Ivan Soares
 

Semelhante a Lista de exercicio 6 (18)

Aula 5
Aula 5 Aula 5
Aula 5
 
EDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdfEDA_Aula_09_Complexidade_2021.1.pdf
EDA_Aula_09_Complexidade_2021.1.pdf
 
Operações básicas da matemática
Operações básicas da matemáticaOperações básicas da matemática
Operações básicas da matemática
 
Aplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic SortAplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic Sort
 
19_vetores.pdf
19_vetores.pdf19_vetores.pdf
19_vetores.pdf
 
Modulo02
Modulo02Modulo02
Modulo02
 
Matemetica basica
Matemetica basicaMatemetica basica
Matemetica basica
 
Tutorial aed iii 004 - algoritmo de ordenação quicksort
Tutorial aed iii   004 - algoritmo de ordenação quicksortTutorial aed iii   004 - algoritmo de ordenação quicksort
Tutorial aed iii 004 - algoritmo de ordenação quicksort
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Comparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de OrdenaçãoComparação Experimental de Algoritmos de Ordenação
Comparação Experimental de Algoritmos de Ordenação
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Arvores.pdf
Arvores.pdfArvores.pdf
Arvores.pdf
 
Herança e_vetores.pdf_
 Herança e_vetores.pdf_ Herança e_vetores.pdf_
Herança e_vetores.pdf_
 
Laboratório de Algoritmos Avançados: Busca Ternária
Laboratório de Algoritmos Avançados: Busca TernáriaLaboratório de Algoritmos Avançados: Busca Ternária
Laboratório de Algoritmos Avançados: Busca Ternária
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble SortCálculo Numérico: Interpolação Polinomial com Bubble Sort
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
 
Análise de Viga através de NX Nastran e Matlab (Galerkin)
Análise de Viga através de NX Nastran e Matlab (Galerkin)Análise de Viga através de NX Nastran e Matlab (Galerkin)
Análise de Viga através de NX Nastran e Matlab (Galerkin)
 
Aula 2
Aula 2Aula 2
Aula 2
 

Lista de exercicio 6

  • 1. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA Exercícios de Algoritmos e Estrutura de Dados Assunto: Lista de Exercícios 6 Componentes: Wárlley Júnio Andrade Curso: Superior em Sistemas de Informação Série/Turma: BSI111A Professor: Bruno Toledo São João Evangelista, Maio de 2012.
  • 2. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA 1. Qual a ideia central do Quicksort? O Quicksort utiliza o conceito de divisão e conquista, ou seja, dividir o problema grande em subproblemas para a resolução, para isso ele utiliza a recursividade para que ele possa dividir o problema. 1 primeira parte do algoritmo seria encontra o pivô, o pivô nada mais é que a soma dos índices externos do vetor divididos por 2 , ou seja é o índice médio do vetor. 2 A principio o algoritmo separa os elementos maiores que o pivô para a direita e os elementos menores que o pivô para a esquerda pois vai ser com o pivô que ele vai comparar cada elemento para colocá-lo na ordem certa. 2. Descreva a utilidade da Partição do método Quicksort? A partição tem a função de rearranjar o vetor por meio da escolha de um pivô, de tal forma que ao final o vetor estará particionado com uma parte esquerda com todos os elementos anteriores ao pivô menores que ele, e outra parte onde todos os elementos posteriores ao pivô sejam maiores que ele. 3. Qual(ais) a(s) diferença(s) entre o pior caso e o melhor caso do método Quicksort? Pior caso: C(n) = O (n2)  O pior caso ocorre quando, sistematicamente, o pivô é escolhido como sendo um dos extremos de um arquivo já ordenado.  Isto faz com que o procedimento Ordena seja chamado recursivamente n vezes, eliminando apenas um item em cada chamada. Melhor caso:  C(n) = 2C(n/2) + n = n log n  Esta situação ocorre quando cada partição divide o arquivo em duas partes iguais. 4. Quais as vantagens do Quicksort? É extremamente eficiente para ordenar arquivos de dados. Necessita de apenas uma pequena pilha como memória auxiliar. Requer cerca de n log n comparações em média para ordenar n itens. 5. Quais as desvantagens do Quicksort? Tem um pior caso O(n2) comparações. Sua implementação é muito delicada e difícil: Um pequeno engano pode levar a efeitos inesperados para algumas entradas de dados. O método não é estável. 6. Explique o funcionamento do algoritmo abaixo: Int partição (int x[], int p, int r) { Int pivo, I,j; // declaração das variáveis locais
  • 3. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA Pivo =x[(p+r)/2]; // aqui é realizado o calculo para achar o pivô I = p – 1; // i percorre da esquerda para direita J = r +1; // j percorre da direita para esquerda While(i < j) // repetição enquanto o extremo i for menor que o j { Do { J = j – 1; // o índice que aponta para valor que vai ser comparado e percorrido da direita para a esquerda ate chegar no pivô para realizar a ordenação } While (x[j] > pivô); // enquanto o vetor j for maior que o pivô, o vetor é percorrido Do { I = I +1; // o índice que aponta para o valor que vai ser percorrido da esquerda para a direita ate chegar no pivô para realizar a ordenação } While (x[i] < pivo); enquanto o vetor i for menor que o pivô, vai percorrendo o vetor If (I < j) Troca (x, I, j); // aqui é realizada a troca de valores na função troca } Return j; } 7. Utilizando o método de ordenação Quicksort onde o pivô será o valor central, ordene o vetor com os valores: 3, 8, 9, 15, 12, 10, 1, 17, 20, 25. 0 1 2 3 4 5 6 7 8 9 3 8 9 15 12 10 1 17 20 25 Primeira partição: 0 1 2 3 4 5 6 7 8 9 3 8 9 1 10 12 15 17 20 25 Segunda partição: 0 1 2 3 4 3 8 1 9 10 Terceira partição: 0 1 2 3 1 8 Quarta partição: 0 1 2 1 3 8
  • 4. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA 0 1 2 3 4 5 6 7 8 9 1 3 8 9 10 12 15 17 20 25 Quinta partição: 5 6 7 8 9 12 15 17 20 25 Caso especial: Pivô já está na posição correta Final: 0 1 2 3 4 5 6 7 8 9 1 3 8 9 10 12 15 17 20 25 8. Utilizando o algoritmo em C do Quicksort, cujo pivô é o valor central do vetor, faça um código onde peça o usuário para digitar 5 valores de um vetor e retorne a ordenação de forma decrescente #include <stdio.h> #include <stdlib.h> int quick(int v[],int ini, int fim) { int i,f,pivo,aux; i=ini; f=fim; pivo=v[(ini+fim)/2]; while(i<f) { while (v[i]> pivo) //v[i]<pivo separa os elementos < pivo para a esquerda { i++; } while (v[f]< pivo) //v[i]>pivo separa os elementos > pivo para a esquerda { f--; } if (i<=f) { aux = v[i]; v[i] = v[f]; v[f] = aux; i++; f--; } } if (f > ini)
  • 5. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA { quick(v,ini,f); } if (i < fim) { quick (v,i,fim); } } int main() { int vetor[5]; int i; printf(" -------- entre com o vetor desordenado: ---------nn"); for(i = 0; i<5; i++) { printf("valor da posicao %d: ",i); scanf("%d",&vetor[i]); } printf("n"); printf("vetor original:"); for(i = 0;i<5;i++) printf(" %d",vetor[i]); printf("nn"); quick(vetor,0,4); printf("vetor ordenado:"); for(i=0;i<5;i++) printf(" %d", vetor[i]); printf("nn"); system("pause"); }