Lista de exercicio 6

944 views

Published on

Algoritmos de Ordenação

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
944
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lista de exercicio 6

  1. 1. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA Exercícios deAlgoritmos e Estrutura de DadosAssunto: Lista de Exercícios 6Componentes: Wárlley Júnio AndradeCurso: Superior em Sistemas de InformaçãoSérie/Turma: BSI111AProfessor: Bruno Toledo São João Evangelista, Maio de 2012.
  2. 2. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA1. 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 queao final o vetor estará particionado com uma parte esquerda com todos os elementos anteriores aopivô menores que ele, e outra parte onde todos os elementos posteriores ao pivô sejam maioresque 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. 3. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTAPivo =x[(p+r)/2]; // aqui é realizado o calculo para achar o pivôI = p – 1; // i percorre da esquerda para direitaJ = r +1; // j percorre da direita para esquerdaWhile(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 aesquerda ate chegar no pivô para realizar a ordenação }While (x[j] > pivô); // enquanto o vetor j for maior que o pivô, o vetor é percorridoDo { I = I +1; // o índice que aponta para o valor que vai ser percorrido da esquerda para a direita atechegar no pivô para realizar a ordenação }While (x[i] < pivo); enquanto o vetor i for menor que o pivô, vai percorrendo o vetorIf (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 ovetor com os valores: 3, 8, 9, 15, 12, 10, 1, 17, 20, 25.0 1 2 3 4 5 6 7 8 93 8 9 15 12 10 1 17 20 25Primeira partição: 0 1 2 3 4 5 6 7 8 93 8 9 1 10 12 15 17 20 25Segunda partição:0 1 2 3 43 8 1 9 10Terceira partição:0 1 23 1 8Quarta partição:0 1 21 3 8
  4. 4. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MINAS GERAIS CAMPUS SÃO JOÃO EVANGELISTA0 1 2 3 4 5 6 7 8 91 3 8 9 10 12 15 17 20 25Quinta partição: 5 6 7 8 9 12 15 17 20 25 Caso especial: Pivô já está na posição corretaFinal:0 1 2 3 4 5 6 7 8 91 3 8 9 10 12 15 17 20 258. Utilizando o algoritmo em C do Quicksort, cujo pivô é o valor central do vetor, faça umcódigo onde peça o usuário para digitar 5 valores de um vetor e retorne a ordenação deforma 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. 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");}

×