• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Lista de exercicio 6
 

Lista de exercicio 6

on

  • 429 views

Algoritmos de Ordenação

Algoritmos de Ordenação

Statistics

Views

Total Views
429
Views on SlideShare
429
Embed Views
0

Actions

Likes
0
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Lista de exercicio 6 Lista de exercicio 6 Document Transcript

    • 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.
    • 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
    • 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
    • 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)
    • 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");}