Sunteți pe pagina 1din 5

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DE MINAS GERAIS

CAMPUS SO JOO EVANGELISTA

Exerccios de Algoritmos e Estrutura de Dados

Assunto: Lista de Exerccios 6

Componentes: Wrlley Jnio Andrade

Curso: Superior em Sistemas de Informao Srie/Turma: BSI111A Professor: Bruno Toledo

So Joo Evangelista, Maio de 2012.

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DE MINAS GERAIS

CAMPUS SO JOO EVANGELISTA

1. Qual a ideia central do Quicksort? O Quicksort utiliza o conceito de diviso e conquista, ou seja, dividir o problema grande em subproblemas para a resoluo, 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 mdio 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 Partio do mtodo Quicksort? A partio tem a funo 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) diferena(s) entre o pior caso e o melhor caso do mtodo 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 situao ocorre quando cada partio 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 memria auxiliar. Requer cerca de n log n comparaes em mdia para ordenar n itens.

5. Quais as desvantagens do Quicksort? Tem um pior caso O(n2) comparaes. Sua implementao muito delicada e difcil: Um pequeno engano pode levar a efeitos inesperados para algumas entradas de dados. O mtodo no estvel. 6. Explique o funcionamento do algoritmo abaixo: Int partio (int x[], int p, int r) { Int pivo, I,j; // declarao das variveis locais

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DE MINAS GERAIS

CAMPUS SO JOO 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) // repetio 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 ordenao } 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 ordenao } 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 funo troca } Return j; } 7. Utilizando o mtodo de ordenao 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 10 1 17 20 25 12 Primeira partio: 0 1 2 3 4 5 6 7 8 9 3 8 9 1 12 15 17 20 25 10 Segunda partio: 0 1 2 3 4 3 9 10 8 1 Terceira partio: 0 3 1 Quarta partio: 0 1 1 3 8 2

1 8

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA DE MINAS GERAIS

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

Quinta partio: 5 6 7 8 9 12 15 20 25 17 Caso especial: Piv j est na posio correta Final: 0 1 1 3 2 8 3 9 4 10 5 12 6 15 7 17 8 20 9 25

8. Utilizando o algoritmo em C do Quicksort, cujo piv o valor central do vetor, faa um cdigo onde pea o usurio para digitar 5 valores de um vetor e retorne a ordenao 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 EDUCAO, CINCIA E TECNOLOGIA DE MINAS GERAIS

CAMPUS SO JOO 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: ---------\n\n"); 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("\n\n"); quick(vetor,0,4); printf("vetor ordenado:"); for(i=0;i<5;i++) printf(" %d", vetor[i]); printf("\n\n"); system("pause"); }

S-ar putea să vă placă și