Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
|
|
- Luciano Carvalhal
- 4 Há anos
- Visualizações:
Transcrição
1 Programação II Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
2 Quick Sort (Ordenação Rápida)
3 Algoritmo Quick Sort (recursivo) O algoritmo de Quick Sort foi desenvolvido por Sir Charles Hoare (Tony Hoare), em 1960, aos 26 anos. Suponha que você sabe colocar um dos elementos x do vetor (por exemplo, o primeiro) numa posição tal que todos os elementos antes são menores ou iguais a x e todos os elementos depois dele são maiores (note que, nesta tarefa, não importa se alguns elementos trocam de posição): x x x x 5 5 n elementos n = 8 Vamos denominar o elemento x escolhido de pivô e chamar esta etapa da ordenação de PARTIÇÃO. Neste caso, se você souber ordenar o subvetor esquerdo e o subvetor direito, você terá o vetor inicial completamente ordenado! Isto nos leva a definir uma função recursiva quicksort na qual o caso-base é um vetor com 1 ou nenhum elemento (e, neste caso, nada é preciso fazer) e o caso geral é fazer a partição seguida da chamada da função para o subvetor esquerdo e da chamada da função para o subvetor direito: quicksort do vetor se n 1 então retorna faz PARTIÇÃO com pivô x (i.e. coloca x no lugar certo) quicksort do subvetor à esquerda de x quicksort do subvetor à direita de x No próximo slide estão sugeridos um processo simples e direto para a PARTIÇÃO e uma maneira de se referenciar aos subvetores à esquerda e à direita de x.
4 PARTIÇÃO x a a v a x a para Algoritmo Quick Sort (recursivo) - CRESCENTE Para a PARTIÇÃO, podemos ir caminhando com os índices do vetor: a b... a b v b x b para se a b, troca e incrementa região dos x se b a, troca pivô x com v b Subvetor à esq v b x v a 0 a b posição correta de x b região dos x b Subvetor à dir n - a repete processo para cada subvetor caminham enquanto fica repetindo até que a b a b b b b a b b a incr a se v a x decr b se v b x troca e incr/decr não troca nem in/decr troca pivô quicksort(n,v) se n <= 1 então retorna x = v 0 a = 1 b = n-1 faça enquanto a < n e v a x a = a + 1 enquanto v b > x b = b - 1 se a < b então troca v a com v b e a= a+1 e b= b-1 enquanto a b troca pivô x com v b quicksort(b, subvetor esquerdo) quicksort(n-a, subvetor direito)
5 Partição Código Quick Sort CRESCENTE quicksort(n,v) se n <= 1 então retorna x = v 0 a = 1 b = n-1 faça enquanto a < n e v a x a = a + 1 enquanto v b > x b = b - 1 se a < b então troca v a com v b e a= a+1 e b= b-1 enquanto a b troca pivô x com v b quicksort(b, subvetor esquerdo) quicksort(n-a, subvetor direito) void quicksort(int n, int * v) int x = v[0]; int temp; int a = 1; int b = n-1; if (n<=1) return; do while (a < n && v[a] <= x ) while ( v[b] > x ) if (a < b) temp = v[a]; v[a] = v[b]; v[b] = temp; while (a <= b); v[0] = v[b]; v[b] = x; quicksort(b,v); quicksort(n-a,&v[a]);
6 Generalizando o Algoritmo Quick Sort - Crescente O desenvolvimento apresentado nos slides anteriores refere-se à ordenação em ordem CRESCENTE de um vetor de INTEIROS. Uma primeira generalização é perceber que a partição divide o vetor em elementos que atendem o critério de ordenação à direita do pivô e elementos que NÃO atendem à esquerda. Por exemplo, a ilustração da partição para uma ordem CRESCENTE seria: O critério de ordenação pode ser definido numa função auxiliar de comparação que é usada em dois momentos no algoritmo de quick sort, sendo um momento a negação do outro (operador!): static int cmpint(int x, int y) return x > y ; void quicksort(int n, int * v) int x = v[0]; int temp; int a = 1; int b = n-1; if (n<=1) return; do while (a < n &&!cmpint(v[a],x)) while (cmpint(v[b],x)) if (a < b) temp = v[a]; v[a] = v[b]; v[b] = temp; while (a <= b); v[0] = v[b]; v[b] = x; quicksort(b,v); quicksort(n-a,&v[a]); Elementos à esquerda NÃO atendem ao critério Elementos à direita atendem ao critério Geralmente definimos a função auxiliar como sendo static. Função static é invisível fora do arquivo no qual é declarada. O que é útil em módulos.
7 Generalizando o Algoritmo Quick Sort - Decrescente O desenvolvimento apresentado nos slides anteriores refere-se à ordenação em ordem CRESCENTE de um vetor de INTEIROS. Uma primeira generalização é perceber que a partição divide o vetor em elementos que atendem o critério de ordenação à direita do pivô e elementos que NÃO atendem à esquerda. Por exemplo, a ilustração da partição para uma ordem DECRESCENTE seria: O critério de ordenação pode ser definido numa função auxiliar de comparação que é usada em dois momentos no algoritmo de quick sort, sendo um momento a negação do outro (operador!): static int cmpint(int x, int y) return x < y ; void quicksort(int n, int * v) int x = v[0]; int temp; int a = 1; int b = n-1; if (n<=1) return; do while (a < n &&!cmpint(v[a],x)) while (cmpint(v[b],x)) if (a < b) temp = v[a]; v[a] = v[b]; v[b] = temp; while (a <= b); v[0] = v[b]; v[b] = x; quicksort(b,v); quicksort(n-a,&v[a]); Elementos à esquerda NÃO atendem ao critério Elementos à direita atendem ao critério
8 Template void qsorttipo(int n, Tipo * v) // Ex: Tipo= int, Tipo= float, Tipo= Aluno * Tipo x = v[0]; Tipo temp; int a = 1, b = n-1; if (n<=1) return; do while (a < n &&!cmpfunction(v[a],x)) while (cmpfunction(v[b],x)) if (a < b) temp = v[a]; v[a] = v[b]; v[b] = temp; while (a <= b); v[0] = v[b]; v[b] = x; qsorttipo(b,v); qsorttipo(n-a,&v[a]); Função critério de ordenação static int cmpfunction(tipo x1, Tipo x2) // Criterio que retorna verdadeiro ou falso Pode ser um critério simples (p.ex., se for vetor de inteiros) ou um critério composto se for uma estrutura: p.ex., primeiro ordena crescente pelo peso e depois crescente pela idade. Neste caso, o critério é uma expressão booleana: pesox1 > pesox2 (pesox1 == pesox2 && idadex1 > idadex2)
9 Exercício 1 Ordenar vetor de floats Escreva um programa completo que ordena CRESCENTEMENTE um vetor de floats através do Quick Sort (e usando função de comparação). Depois indique a mudança para a ordenação DECRESCENTE.
10 Solução Exercício 1 Vetor de floats #include <stdio.h> int cmpfunction(float x1, float x2) // funcao criterio de ordenacao return x1 < x2; void qsortfloat(int n, float * v) float x = v[0]; float temp; int a = 1, b = n - 1; if (n <= 1) return; do while (a < n &&!cmpfunction(v[a], x)) while (cmpfunction(v[b], x)) if (a < b) temp = v[a]; v[a] = v[b]; v[b] = temp; while (a <= b); v[0] = v[b]; v[b] = x; qsortfloat(b, v); qsortfloat(n - a, &v[a]); // Decrescente, e return x1 > x2; se Crescente printarray(float * v, int n) int i; for (i = 0; i < n; i++) printf("%.1f\n", v[i]); int main(void) float vtemp[] = 40.0, 15.0, 25.0, 30.0, 10.0 ; int n = 5; qsortfloat(n, vtemp); printarray(vtemp, n); return 0;
11 Exercício 2 Ordena vetor de ponteiros para Dados Escreva programa completo, em módulos, que ordena um vetor de ponteiros para estrutura Dados através do Quick Sort (e usando função de comparação), de acordo o seguinte critério: primeiro em ordem crescente da idade e depois em ordem crescente do peso. struct dados int idade; int peso; ; typedef struct dados Dados; Sugestão para teste: Dados tab[] = 20,50,10,30,25,40,18,65,10,40,18,60; Dados * v[] = tab,tab+1,tab+2,tab+3,tab+4,tab+5; Faça a implementação em módulos com: dados.h, dados.c e testedados.c.
12 qsort Quick Sort da Biblioteca C
13 Ponteiros para Funções Em C é possível definir ponteiros para funções que podem ser colocados em vetores, passados para funções e retornados por funções No exemplo a seguir, a função opera(m, x, y, func) recebe um ponteiro de função como um de seus argumentos (func) e retorna m func(x,y). Devemos notar que o nome da função mult é um ponteiro quando escrevemos opera(2,3,5,mult); #include <stdio.h> Se argumentos são ponteiros, usamos const quando queremos garantir que a função func não modificará os valores que são int mult(int x,int y); apontados: int(*func)(const int *, const int *)) int soma(int x, int y); int opera(int m, int x, int y, int(*func)(int, int)); int main(void) int a, b; a = opera(2,3,5,mult); b = opera(2,3,5,soma); printf("%d %d\n",a,b); return 0; Saída: int mult(int x,int y) return x*y; int soma(int x, int y) return x+y; int opera(int m,int x,int y,int(*func)(int, int)) return m*func(x,y);
14 Quick Sort da stdlib do C void qsort(void * v, int n, int tam, int (*cmp)(const void *, const void *)); v: vetor de ponteiros genéricos n: número de elementos do vetor tam: tamanho em bytes de cada elemento (use sizeof para especificar) cmp: ponteiro para função que compara elementos genéricos int nome(const void * a, const void * b); deve retornar <0 se a<b, >0 se a>b e 0 se a == b const é para garantir que a função não modificará os valores dos elementos static int compfloat(const void * a, const void * b) /* converte os ponteiros genericos */ float * aa = (float *)a; float * bb = (float *)b; /* faz a comparacao com (*aa) e (*bb) retornando -1,0, ou 1 */ if (*aa > *bb) // atenção para o * return 1; else if (*aa < *bb) return -1; else return 0; chamada: qsort(v,n,sizeof(float),compfloat); // N é o tamanho de v
15 Exemplo Quick Sort da stdlib #include <stdlib.h> int main(void)... void QsortPessoa(int n, Pessoa ** v) qsort(v,n,sizeof(pessoa *),comppessoa); Pessoa tab[] = "Diana Maria",22,...; Pessoa * v[] = tab,tab+1,...;... QsortPessoa(n,tabPessoa); // ordenacao com Quick Sort... int comppessoa(const void * a, const void * b) Pessoa ** aa = (Pessoa **)a; Pessoa ** bb = (Pessoa **)b; int cmp = strcmp((*aa)->nome,(*bb)->nome); if (cmp>0 (cmp==0 && ((*aa)->idade>(*bb)->idade))) return 1; else if (cmp<0 (cmp==0 && ((*aa)->idade<(*bb)->idade))) return -1; else return 0;
Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio Quick Sort (Ordenação Rápida) Algoritmo Quick Sort (recursivo) O algoritmo de Quick Sort foi desenvolvido por Sir Charles Hoare
Leia maisProgramação II. Tópicos Extras Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Tópicos Extras Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio qsort Quick Sort da Biblioteca C Ponteiros para Funções Em C é possível definir ponteiros para funções que podem
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 09 Ordenação de Vetores Edirlei Soares de Lima Ordenação de Vetores Problema: Entrada: vetor com os elementos a serem ordenados; Saída: mesmo vetor com
Leia maisProgramação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio Bubble Sort Bubble Sort Ordem Crescente Apenas de interesse didático e de referência A idéia é ir comparando dois vizinhos e trocando
Leia maisMódulo 16 - Ordenação
Estruturas de Dados Módulo 16 - Ordenação 15/05/2013 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus
Leia maisProgramação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio Busca em Vetor Problema: Entrada: vetor v com n elementos elemento d a procurar Saída m se o elemento procurado está em
Leia maisProgramação de Computadores II. Cap. 16 Ordenação
Programação de Computadores II Cap. 16 Ordenação Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:
Leia maisLinguagem C: Ordenação
Instituto de C Linguagem C: Ordenação Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Introdução Algoritmos de ordenação Ordenação
Leia maisProgramação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio
Progrmção II Ordenção (sort) Bruno Feijó Dept. de Informátic, PUC-Rio Bule Sort Bule Sort Apens de interesse didático e de referênci A idéi é ir comprndo dois vizinhos e trocndo o menor pelo mior té que
Leia maisMódulo 16 - Ordenação. Referências
Estruturas de Dados Módulo 6 - Ordenação /5/006 (c) Dept. Informática - PUC-Rio Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (004) Capítulo
Leia maisEstruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1
Estruturas de Dados Módulo 17 - Busca 2/6/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)
Leia maisALGORITMOS DE ORDENAÇÃO RECURSIVOS
1/14 ALGORITMOS DE ORDENAÇÃO RECURSIVOS Ordenação rápida ( Quicksort ) 2/14 Ordenação rápida ( Quicksort ) Ideia - Baseia-se num princípio muito simples que, quando aplicado recursivamente, acaba por ordenar
Leia maisINF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1
INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática
Leia maisProjeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 09 Algoritmos de Ordenação Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída: conjunto de itens
Leia maisAlgoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Leia maisRecuperação P1 de Estrutura de Dados
Recuperação P1 de Estrutura de Dados Sigla _IED001_ TURMA: A PERÍODO: MAT ( ) NOT ( ) DISCIPLINA:_Estrutura de Dados DATA: / / Argumente com fundamentando as questões da avaliação indicando porque a questão
Leia maisProgramação II. Vetores Bidimensionais e Vetores de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores Bidimensionais e Vetores de Ponteiros Bruno Feijó Dept. de Informática, PUC-Rio Array (Vetor) Bidimensional 0 0 1 2 3 4 5 6 7 8 14 1 2 Array (Vetor) Bidimensional vs Ponteiros Quando
Leia maisProgramação II. Vetor de Tipo Estruturado e Vetor de Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetor de Tipo Estruturado e Vetor de Ponteiros Bruno Feijó Dept. de Informática, PUC-Rio Vetores e Tipos Estruturados Dado um tipo estruturado T (com 3 campos, por exemplo), podemos ter
Leia maisProgramação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Árvores Dados organizados de maneira hierárquica Exemplos: arquivos em diretórios, subdivisão de espaço 2D em um
Leia maisUniversidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet
Aula 17 Quick Sort Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno Ordenação
Leia maisUniversidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec
Universidade Federal do ABC Avaliação: Prova 02 Disciplina: BC1424 - Algoritmos e Estruturas de Dados I Turma: Noturno Professor: Jesús P. Mena-Chalco Data: 03/05/2016 Nome completo: RA: Instruções para
Leia maisProgramação II. Tipos Estruturados
Programação II Tipos Estruturados Parte 1: struct Parte 2: Ponteiros para Estrutura Estruturas e Memória Bruno Feijó Dept. de Informática, PUC-Rio struct Dados Compostos Até agora tipos simples: char,
Leia maisClassificação de Dados
Engenharia de CONTROLE e AUTOMAÇÃO Classificação de Dados Aula 03 DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria beltrame@mail.ufsm.br
Leia maisCarlos Eduardo Batista. Centro de Informática - UFPB
Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Aritmética de ponteiros em C (continuação) O que acontece na memória? Ponteiro para ponteiro etc. Métodos de pesquisa
Leia maisProgramação II. Tipos Estruturados. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Tipos Estruturados Bruno Feijó Dept. de Informática, PUC-Rio Dados Compostos Até agora tipos simples: char, int, float,. Necessidade por dados compostos, por tipos estruturados Ex.: pontos
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisP2 Programação II Departamento de Informática/PUC-Rio
P2 Programação II 2013.1 Departamento de Informática/PUC-Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente
Leia maisOrdenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I
Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação
Leia maisAED - Algoritmos e Estruturas de Dados Licenciatura em Engenharia Electrónica
AED - Algoritmos e Estruturas de Dados Licenciatura em Engenharia Electrónica Exame de 17 de Junho de 2015-1a Época - Resolução Prova escrita, individual e sem consulta. 20 valores. NOME: NÚMERO: PARTE
Leia maisQuestão 1.a) (2.5 pontos ) tipodabolsa matricula EhBolsista
Questão 1.a) (2.5 pontos ) Considere um vetor de ponteiros para Bolsista ordenado em ordem crescente (alfabética) por tipodabolsa. Para um mesmo tipo de bolsa, o vetor encontra-se ordenado crescentemente
Leia maisINF 1007 Programação II
INF 1007 Programação II Aula 08 Busca em Vetor Edirlei Soares de Lima Busca em Vetor Problema: Entrada: vetor v com n elementos; elemento d a procurar; Saída: m se o elemento procurado
Leia maisAlgoritmos de ordenação Ordenação rápida ( Quicksort )
Ordenação rápida ( Quicksort ) Baseia-se num princípio muito simples que, quando aplicado recursivamente, acaba por ordenar o vector. Este princípio é composto por 2 passos essenciais: 1. Escolher um elemento
Leia maisProgramação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Vetores vs Estruturas Dinâmicas Vetores (arrays): Ocupa um espaço contíguo de memória Permite acesso randômico
Leia maisINF 1620 P2-23/10/04 Questão 1 Nome:
INF 1620 P2-23/10/04 Questão 1 Considere um tipo abstrato de dados para representar uma disciplina da PUC-Rio, com as seguintes informações: Nome da disciplina: com até 50 caracteres Código da disciplina:
Leia maisALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA MÉTODOS MAIS EFICIENTES QUE O(N 2 ) Método Quicksort Método
Leia maisQuicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Quicksort David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Quicksort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla
Leia maisProgramação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Vetores e Alocação Dinâmica Bruno Feijó Dept. de Informática, PUC-Rio Vetores (arrays) Vetor: estrutura de dados definindo um conjunto enumerável Exemplo: v = vetor de inteiros com 10 elementos
Leia maisEstruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C
Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos
Leia maisAluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0
P4 Programação II 2012.2 Departamento de Informática/PUC- Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente
Leia maisINF 1620 P3-02/07/02 Questão 1 Nome:
INF 1620 P3-02/07/02 Questão 1 Considere um arquivo texto que contém os nomes e as notas dos alunos de uma disciplina. As informações de cada aluno ocupam duas linhas do arquivo: a primeira linha contém
Leia maisAlgoritmos e Estruturas de Dados
Introdução aos Algoritmos e Estruturas de Dados 2 o Teste - A LEIC Alameda, 2007/2008 Data: 12 de Junho de 2008 2 o Semestre Duração: 2h RESOLUÇÃO I. (2.5+2.5 = 5.0 val.) I.a) Suponha que está a trabalhar
Leia maisEstrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática
Estrutura de Dados Algoritmos de Ordenação Prof. Othon M. N. Batista Mestre em Informática Roteiro Introdução Ordenação por Inserção Insertion Sort Ordenação por Seleção Selection Sort Ordenação por Bolha
Leia maisREVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento
Leia maisponteiros INF Programação I Prof. Roberto Azevedo
ponteiros INF1005 -- Programação I -- 2016.1 Prof. Roberto Azevedo razevedo@inf.puc-rio.br ponteiros tópicos o que são ponteiros operadores usados com ponteiros passagem de ponteiros para funções referência
Leia maisÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior
ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior Árvore Binária de Busca (ABB) o valor associado à raiz é sempre maior que o valor associado a qualquer nó da sub-árvore à esquerda
Leia maisINF 1620 P3-27/11/04 Questão 1 Nome:
INF 1620 P3-27/11/04 Questão 1 Considere um arquivo texto com as notas dos alunos de uma disciplina. Os dados de cada aluno são armazenados em duas linhas do arquivo: uma com o seu nome (cadeia com até
Leia maisPROVA P2 INF1007-31/10/2014 Programação II
ALUNO: MATRÍCULA: (Nome Completo em Letra de Imprensa) ASSINATURA: TURMA: Instruções Gerais: 1. A duração da prova é de 1:50h; 2. A tolerância de entrada é de 30 min após o início da prova. Se um aluno
Leia mais1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.
Segunda lista de exercícios v100 Engenharia Elétrica - Eletrônica 2º Semestre de 2015 Prof: Daniel Rodrigo Ferraz Bonetti SSC0300 Linguagem de Programação e Aplicações 1 Faça um programa que leia uma string
Leia maisPROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick aconci@ic.uff.br, erickr@id.uff.br Roteiro Funções Escopo de Variáveis Variáveis Globais
Leia maisAlgoritmos de ordenação
Ordenação rápida ( Quicksort ) Baseia-se num princípio muito simples que, quando aplicado de forma recursiva, acaba por ordenar o vetor. Este princípio é composto por 2 passos essenciais: 1. Escolher um
Leia maisP2 Programação II Departamento de Informática/PUC-Rio
P2 Programação II 2012.2 Departamento de Informática/PUC-Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente
Leia maisAlgoritmos e Estruturas de Dados. Décima sexta aula: Quicksort
Algoritmos e Estruturas de Dados Décima sexta aula: Quicksort Nesta aula vamos Estudar o quicksort. Considerar algumas variantes: Quicksort geral, parametrizando a função de comparação. Quicksort com partição
Leia maisExemplo. Lista Inicial (Desordenada) a. Iteração: Pivô: 25. Elemento da Esquerda: 48 Elemento da Direita: 12
Quick Sort Mais rápido algoritmo de Ordenação (não paralelo) Baseia-se na ordenação de sub-listas divididas por um pivô O pivô é um elemento escolhido ao acaso, que é colocado na sua posição correta quando
Leia maisClassificação por Particionamento
Classificação por Particionamento O método de particionamento é um caso de aplicação do princípio da divisão e conquista: classificar dois vetores de tamanho n/2 é mais fácil que classificar um vetor de
Leia maisINF 1620 P3-29/06/04 Questão 1 Nome:
INF 1620 P3-29/06/04 Questão 1 Considere um arquivo texto que descreve um conjunto de retângulos e círculos. Cada linha do arquivo contém a descrição de uma figura. O primeiro caractere da linha indica
Leia maisINF 1007 Simulado P2 Nome: Instruções
INF 1007 Simulado P2 Nome: Matrícula: Turma: Instruções 1. Tempo de prova: 1 hora e 30 minutos. 2. Entregue a solução de sua prova em um ÚNICO arquivo texto, com o nome Turma_Matricula_P2.txt (por exemplo
Leia maisCapacitação em Linguagem C Parte 2
Capacitação em Linguagem C Parte 2 Andrey Souto Maior Giuseppe Portolese Universidade Estadual de Maringá - Centro de Tecnologia Departamento de Informática 22 de outubro de 2015 Sumário I Tipos abstratos
Leia maisAluno: Para todas as questões desta prova considere os tipos estruturados abaixo:
P2 Programação II 2014.1 Departamento de Informática/PUC- Rio Aluno: Matrícula: Turma: 1. A prova é sem consulta e sem perguntas. A interpretação do enunciado faz parte da prova. 2. A prova deve ser completamente
Leia maisLinguagens de Programação I
Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler
Leia maisÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
ÁRVORES BINÁRIAS DE BUSCA Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REFERÊNCIA Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Cap. 4 INSTITUTO DE COMPUTAÇÃO
Leia maisReinaldo Gomes Alocação Dinâmica
Algoritmos e Lógica de Programação Linguagem C Alocação Dinâmica i de Memória Reinaldo Gomes reinaldo@cefet-al.br Alocação Dinâmica Quando declaramos uma variável ou um arranjo, o compilador automaticamente
Leia maisINF 1620 P3-21/06/08 Questão 1 Nome:
INF 1620 P3-21/06/08 Questão 1 Dada uma lista encadeada de números inteiros cujo tipo que representa um nó da lista é dado por: struct lista { int info; struct lista *prox; typedef struct lista Lista;
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2017) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisDAINF - Departamento de Informática
DAINF - Departamento de Informática Algoritmos 2 - Árvore binária de busca Prof. Alex Kutzke ( http://alex.kutzke.com.br/courses ) 30 de Novembro de 2015 Slides adaptados do material produzido pelo Prof.
Leia maisSumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?
Introdução à Ciência da Computação Ponteiros em C Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros
Leia maisFunções em Linguagem C Parte II
Slides inicialmente preparados pelo Prof. Dr. Claudio Fabiano Motta Toledo Funções em Linguagem C Parte II Profa. Dra. Elisa Yumi Nakagawa 1. Semestre 2017 Sumário Introdução a Ponteiros Escopo de Variáveis
Leia maisProgramação II. Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Ponteiros Bruno Feijó Dept. de Informática, PUC-Rio Ponteiro Ponteiro (pointer) é uma variável que armazena o endereço de uma variável. p Sempre inicialize ponteiros! Ponteiros não inicializados
Leia maisDepartamento de Informática PUC-Rio INF Estruturas de Dados Lista 2 Completa (Gerada em 8 de maio de 2006)
Departamento de Informática PUC-Rio INF1620 - Estruturas de Dados Lista 2 Completa 2006.1 (Gerada em 8 de maio de 2006) 1. Considerando a estrutura struct Ponto { int x; int y; para representar um ponto
Leia maisBCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br
Leia maisMétodos de Ordenação Parte 3
Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária
Leia maisINF 1620 P4 11/12/06 Questão 1 Nome:
INF 1620 P4 11/12/06 Questão 1 Considere que o cálculo da multa para o pagamento de um determinado imposto varia de acordo com a tabela a seguir: Valor do Imposto Original Multa por mês de atraso até R$
Leia maisProgramação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem
Leia maisAlgoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira Anilton Joaquim da Silva
Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira ronaldo.co@ufu.br Anilton Joaquim da Silva anilton@ufu.br Introdução Uma das aplicações mais estudadas e realizadas sobre arranjos
Leia maisINF 1620 P3-25/11/05 Questão 1 Nome:
INF 1620 P3-25/11/05 Questão 1 Dizemos que uma matriz quadrada é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos de sua diagonal principal
Leia maisProgramação II. Introdução a Funções. Bruno Feijó Dept. de Informática, PUC-Rio
Programação II Introdução a Funções Bruno Feijó Dept. de Informática, PUC-Rio Funções Matemáticas função é uma relação de um ou vários valores de argumentos de entrada em um ÚNICO resultado de saída. y
Leia maisClassificação por Seleção - selection sort
Classificação por Seleção - selection sort Outro método também simples de ordenação é a ordenação por seleção. Princípio de funcionamento: 1. Selecione o menor item do vetor (ou o maior). 2. Troque-o com
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2018) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisPermite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.
222222222222222222222222222 8 - FUNÇÕES 81 - Características básicas É um trecho independente de código, com objetivos bem definidos Programas em C, geralmente consistem em várias pequenas funções, ao
Leia maisALGORITMOS DE ORDENAÇÃO
ALGORITMOS DE ORDENAÇÃO Prof. André Backes Conceitos básicos 2 Ordenação Ato de colocar um conjunto de dados em uma determinada ordem predefinida Fora de ordem 5, 2, 1, 3, 4 Ordenado 1, 2, 3, 4, 5 OU 5,
Leia maisCarlos Eduardo Batista. Centro de Informática - UFPB
Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Métodos de pesquisa e classificação de dados (continuação) Estruturas de Dados 2 Algoritmo de busca Recebe como argumento
Leia maisCIC 110 Análise e Projeto de Algoritmos I
CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá sort AULA 02 Ordenação A classificação é um problema de design de algoritmo fundamental.
Leia maisINTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2018) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
Leia maisIntrodução à Programação / Programação I
Introdução à Programação / Programação I Aula 19: Mais exemplos de recursão Rita P. Ribeiro 2018/2019 Departamento de Ciência de Computadores Nesta aula 1. Desenhar árvores 2. Torre de Hanoi 3. Ordenação
Leia maisAED2 - Aula 11 Problema da separação e quicksort
AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos
Leia maisAlgoritmos de Ordenação: QuickSort
Algoritmos de Ordenação: QuickSort ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 10/2008 Material
Leia maisConteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim
Algoritmos de Ordenação e Busca e sua Análise de Complexidade Alneu de Andrade Lopes Rosane Minghim Introdução Busca seqüencial Busca binária Notação O(f(n)) Hierarquia de funções Selection sort Insertion
Leia maisINF 1620 P2-14/10/05 Questão 1 Nome:
INF 1620 P2-14/10/05 Questão 1 Considere um cadastro de produtos de um estoque, com as seguintes informações para cada produto: Código de identificação do produto: representado por um valor inteiro Nome
Leia maisALGORITMOS E ESTRUTURAS DE DADOS CES-11
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA CAP. 5. TÉCNICAS DE ORDENAÇÃO 5.1. Introdução 5.2. Métodos
Leia maisCURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI
CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI O QUE SÃO ALGORITMOS DE ORDENAÇÃO? São algoritmos que organizam
Leia maisMódulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Leia maisSCC Algoritmos e Estruturas de Dados I
SCC 202 - Algoritmos e Estruturas de Dados I Lista 4 de Exercícios (Listas Generalizadas, Listas Cruzadas) 1. Sobre listas generalizadas, responda os seguintes itens: (a) Quais suas vantagens? (b) Quais
Leia maisLinguagem C: Ponteiros - Alocação Dinâmica
Prof. Paulo R. S. L. Coelho paulo@facom.ufu.br Faculdade de Computação Universidade Federal de Uberlândia GEQ007 Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4 Organização Ponteiros Alocação
Leia maisExame de Programação Estruturada (A)
Exame de Programação Estruturada (A) 2006.06.16 1. Resposta: UMA RESOLUÇÃO (VERSÃO A) static int indicevogal(int c) { switch(c) { case A : case a : return 0; case E : case e : return 1; case I : case i
Leia maisINF 1010 Estruturas de Dados Avançadas
INF 1010 Estruturas de Dados Avançadas Listas de Prioridades e Heaps 12/09/16 2012 DI, PUC-Rio Estruturas de Dados Avançadas 2012.1 1 uma outra aplicação de árvores binárias lista de prioridades: lista
Leia maisFilas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:
Filas de Prioridade e Heaps 9.1 Filas de Prioridade Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: inserir um elemento na fila; remover o elemento
Leia maisUNIVERSIDADE DA BEIRA INTERIOR
UNIVERSIDADE DA BEIRA INTERIOR Algoritmos e Estruturas de Dados - Bioengenharia 2º Semestre Exame Época Normal Resolução 13/junho/2015 A. [3.5 val] Algoritmos de ordenação e de pesquisa Considere-se as
Leia maisINF 1620 P2-01/11/03 Questão 1 Nome:
INF 1620 P2-01/11/03 Questão 1 Considere a implementação de uma lista encadeada para armazenar as notas dos alunos de uma turma dada pelo tipo abaixo: struct lista { char nome[81]; int mat; float p1, p2,
Leia maisArquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo
Arquivos Sequenciais Estruturas de Dados II Vanessa Braganholo Arquivos Sequenciais } Pq arquivos sequenciais? Relembrando } Relembrando: uma tabela ou arquivo é um conjunto de registros que possuem a
Leia maisMAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017
PROVA 1 MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017 Nome: Número USP: Instruções: (1 ) Esta prova é individual. (2 ) Não destaque as folhas deste caderno. (3 ) A prova consiste de 6
Leia maisSSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos
Funções SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves ICMC/USP São Carlos Slides baseados no material gentilmente cedido pela Profa Simone Senger Souza 2 MODULARIZAÇÃO Um
Leia mais