Linguagem C: Algoritmos de Ordenação

Documentos relacionados
2. Ordenação por Seleção

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

TCC 00308: Programação de Computadores I Introdução

Linguagem C: Ponteiros - Alocação Dinâmica

Introdução à Programação. Vanessa Braganholo

Linguagem C vetores multidimensionais

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Linguagem C: Arquivo-Texto

Trabalho: Algoritmos de Busca e Ordenação. 1 Introdução. Prof. Bruno Emerson Gurgel Gomes IFRN - Câmpus Currais Novos. 31 de outubro de 2012

Introdução à Programação

Linguagem C: Subprogramação

Linguagem C: Listas Encadeadas

Exercícios de Laboratório de ICC Engenharia Ambiental 2º Semestre de 2004

Estruturas de Dados. Revisão de Funções e Recursão. Agradecimentos

INF111 Programação II Aulas 11, 12, 13 Ordenação

Algoritmos de Busca em Tabelas

Algoritmos e Estrutura de Dados

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Métodos de Ordenação

Métodos de ordenação. Bubble sort:

O Problema da Ordenação Métodos de Ordenação Parte 1

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

ESTRUTURA DE DADOS (TCC )

Universidade da Madeira. 1. Recursão. 3. Busca. Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2

Estruturas Homogêneas (Vetores) II

7 a Lista de Exercícios Assunto: Funções e passagem por referência com vetor e matriz (Tópico 7)

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

MC102 Algoritmos e Programação de Computadores

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (ILA)

Recuperação P1 de Estrutura de Dados

(a) Indique, em português, o que realiza a seguinte função. [4 pontos]

Lógica de Programação I

ESTRUTURAS COMPOSTAS. Variáveis Compostas Unidimensionais VETOR. Baseado nos slides de Rosely Sanches e Simone Senger de Souza

MÉTODOS DE CLASSIFICAÇÃO EM MEMÓRIA PRIMÁRIA. George Gomes Cabral

MC-102 Aula 17 Strings e Matrizes

MC-102 Aula 12 Matrizes e Vetores Multidimensionais

Estruturas de Repetição

Vetores, Strings e Matrizes

Exercícios Capítulos 5 e 6

Tipos Abstratos de Dados

Lista de Exercícios sobre Recursividade

Complexidade de Algoritmos

Laboratório de Introdução à Ciência da Computação I Aula de Vetores e Matrizes

Linguagens de Programação I

Introdução à Ciência da Computação. Sumário. Estruturas de Dados. Agradecimentos. Arranjos: Vetores, Strings & Matrizes em C

Estruturas de repetição. Objetivos: - Compreender diversos tipos de comandos de repetições disponíveis na linguagem C.

Ordenação em Memória Primária Estrutura de Dados II

1) Operadores de auto incremento ++ e auto decremento --

17 - Funções e Procedimentos em C Programação Modular

INF1005: Programação 1. Repetições. 08/03/10 (c) Paula Rodrigues 1

Linguagem C (repetição)

Arranjos e funções - Passagem de arranjos para funções

Projeto de Algoritmos e Indução Matemática

AED Algoritmos e Estruturas de Dados LEEC /2006. Algoritmos de Ordenação 1ª parte

Tipos Abstratos de Dados

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

MAC 2166 Introdução à Computação para Engenharia

MC-102 Aula 10 Vetores

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

Estruturas de Repetição

Computação I (MAB120) DCC/UFRJ

MC-102 Aula 14. Instituto de Computação Unicamp. 29 de Setembro de 2016

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

BCC202 - Estrutura de Dados I

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

1ª Lista de Exercícios

1 Resumo: Matrizes. 2.1 Como declarar uma matriz IME/USP. Departamento de Ciência da Computação

Análise de programas imperativos

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

A IMPORTÂNCIA DE THREADS NO DESEMPENHO DE APLICAÇÕES

BCC202 - Estrutura de Dados I

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

12 - Dados Estruturados Vetores, Matrizes e Strings

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Algoritmos de ordenação Ordenação rápida ( Quicksort )

FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1

Programação: Vetores

Método de ordenação - objetivos:

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Arrays. IPC2 1999/2000 F. Nunes Ferreira. Acetatos baseados no livro C: How to Program (second edition) H. M. Deitel P. J. Deitel Prentice Hall, 1994

P2 Programação II Departamento de Informática/PUC-Rio

Algoritmos de Classificação de Tabelas - Sorting

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Exercícios Aula Prática XIV

Modularidade - Fun ções e Procedimentos

Logica de Programacao. Jorge Augusto F. de Souza Edward Boszczowski

Quantidade de memória necessária

Lógica de Programação I

O mais leve e o mais pesado Algoritmos de Ordenação

Classificação por Particionamento

PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C

Exercícios de ordenação e matrizes

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

4ª Lista de Exercícios de Programação I

Transcrição:

Introdução Prof. Paulo R. S. L. Coelho paulo@facom.ufu.br Faculdade de Computação Universidade Federal de Uberlândia GEQ007

Organização Introdução 1 Introdução 2 3

Organização Introdução 1 Introdução 2 3

Introdução Introdução Uma das aplicações mais estudadas e realizadas sobre vetores é a ordenação. Ordenar um vetor significa permutar seus elementos de tal forma que eles fiquem em ordem crescente, ou seja, v[0] <= v[1] <= v[2] <=... <= v[n 1]. Por exemplo, suponha o vetor v = 5, 6, 9, 9, 0, 4. Uma ordenação desse vetor resultaria em um rearranjo de seus elementos: v = 9, 0, 4, 5, 6, 9.

Introdução Introdução Exitem diversos algoritmos de ordenação para vetores. Eles variam em relação à dificuldade de implementação e desempenho. Usualmente algoritmos mais fáceis de serem implementados apresentam desempenho inferior. Veremos 3 algoritmos diferentes de ordenação: 1 ; 2 ; e 3 Algoritmo de Intercalação.

Organização Introdução 1 Introdução 2 3

Introdução (Insertion Sort) I Um dos algoritmos de implementação mais simples. Método de ordenação semelhante ao que usamos para ordenar as cartas de um baralho. Idéia básica: Compare a chave (x) com os elementos à sua esquerda, deslocando para direita cada elemento maior do que a chave; Insira a chave na posição correta à sua esquerda, onde os elementos já estão ordenados; Repita os passos anteriores atualizando a chave para a próxima posição à direita até o fim do vetor. Exemplo:

Introdução (Insertion Sort) II PSEUDOCÓDIGO: suponha um vetor v de tamanho n. DECLARE i, j, x, n, v[n] NUMERICO; PARA i = 1 ATÉ i < n FAÇA INICIO x = v[i]; j = i - 1; ENQUANTO j >= 0 e v[j] > x FAÇA INÍCIO v[j+1] = v[j]; j = j-1; FIM v[j+1] = x; FIM

Introdução (Selection Sort) I Implementação muito simples. Idéia básica: Selecione o menor elemento do vetor; Troque esse elemento com o elemento da primeira posição do vetor; Repita as duas operações anteriores considerando apenas os n-1 elementos restantes, em seguida repita com os n-2 elementos restantes; e assim sucessivamente até que reste apenas um elemento no vetor a ser considerado. Exemplo: PSEUDOCÓDIGO: suponha um vetor v de tamanho n.

Introdução (Selection Sort) II DECLARE i, j, aux, n, min, v[n] NUMERICO; PARA i = 0 ATÉ i < n-1 FAÇA INICIO min = i; PARA j = i+1 ATÉ j < n FAÇA INICIO SE v[j] < v[min] ENTAO min = j; FIM aux = v[i]; v[i] = v[min]; v[min] = aux; FIM

Introdução Ordenação por Troca (BubbleSort) I Outro algoritmo simples, útil para ordenação de vetores pequenos (desempenho ruim). Idéia básica: Compare o primeiro elemento com o segundo. Se estiverem desordenados, então efetue a troca de posição. Compare o segundo elemento com o terceiro e efetue a troca de posição, se necessário; Repita a operação anterior até que o penúltimo elemento seja comparado com o último. Ao final desta repetição o elemento de maior valor estará em sua posição correta, a n-ésima posição do vetor; Continue a ordenação posicionando o segundo maior elemento, o terceiro,..., até que todo o vetor esteja ordenado.

Introdução Ordenação por Troca (BubbleSort) II Exemplo:

Introdução Ordenação por Troca (BubbleSort) III PSEUDOCÓDIGO: suponha um vetor v de tamanho n. DECLARE i, j, aux, n, v[n] NUMÉRICO; PARA i = n-1 ATÉ i > 0 FAÇA INÍCIO PARA j = 0 ATÉ j < i FAÇA INÍCIO SE v[j]> v[j+1] aux = v[j]; v[j] = v[j+1]; v[j+1] = aux; FIM FIM

Organização Introdução 1 Introdução 2 3

Introdução 1 Implemente na linguagem C o algoritmo de ordenação insertion sort. Utilize uma função auxiliar para implementar a ordenação. 2 Implemente na linguagem C o algoritmo de ordenação selection sort. Utilize uma função auxiliar para implementar a ordenação. 3 Implemente na linguagem C o algoritmo de ordenação bubblesort. Utilize uma função auxiliar para implementar a ordenação.

Respostas I 1 #include <stdio.h> #include <stdlib.h> void insertionsort(int v[200], int n) { int i, j, x; for(i = 1; i < n; i++) { x = v[i]; j = i - 1; while(j >= 0 && v[j] > x) { v[j+1] = v[j]; j--; v[j+1] = x;

Respostas II int main() { int v[200], n, i; printf("entre tamanho desejado do vetor: "); scanf("%d", &n); printf("entre os %d elementos do vetor:\n", n); for(i = 0; i < n; i++) { scanf("%d", &v[i]); insertionsort(v, n); printf("\n\nvetor ordenado:\n"); for(i = 0; i < n; i++) { printf("%d\t", v[i]); printf("\n"); return 0;

Respostas III 2 #include <stdio.h> #include <stdlib.h> void selectionsort(int v[200], int n) { int i, j, aux, min; for(i = 0; i < n-1; i++) { min = i; for(j = i+1; j < n; j++) { if(v[j] < v[min]) { min = j; aux = v[i]; v[i] = v[min]; v[min] = aux; //troca

Respostas IV int main() { int v[200], n, i; printf("entre tamanho desejado do vetor: "); scanf("%d", &n); printf("entre os %d elementos do vetor:\n", n); for(i = 0; i < n; i++) { scanf("%d", &v[i]); selectionsort(v, n); printf("\n\nvetor ordenado:\n"); for(i = 0; i < n; i++) { printf("%d\t", v[i]); printf("\n"); return 0;

Respostas V 3 #include <stdio.h> #include <stdlib.h> void bubblesort(int v[200], int n) { int i, j, aux; for(i = n-1; i > 0; i--) { for(j = 0; j < i; j++) { if(v[j] > v[j+1]) { aux = v[j]; v[j] = v[j+1]; v[j+1] = aux; //troca

Respostas VI int main() { int v[200], n, i; printf("entre tamanho desejado do vetor: "); scanf("%d", &n); printf("entre os %d elementos do vetor:\n", n); for(i = 0; i < n; i++) { scanf("%d", &v[i]); bubblesort(v, n); printf("\n\nvetor ordenado:\n"); for(i = 0; i < n; i++) { printf("%d\t", v[i]); printf("\n"); return 0;