Vous êtes sur la page 1sur 2

Folha de Exerccios V

Programao e Algoritmos, Complementos de Informtica, Programao II Universidade da Beira Interior Departamento de Informtica 2005/2006

Algoritmos de Ordenao
Nota: Os ficheiros de dados referidos nesta folha encontram-se na pgina da disciplina.
Exerccio 56: (Ordenao por insero ) A seguinte funo em C codifica o algoritmo de ordenao por insero. void ordena_insercao(int v[], int tam) { int j, k, aux; for(k=1; k<tam; k++){ aux = v[k]; for(j=k-1; j>=0 && v[j]>aux; j--) v[j+1] = v[j]; v[j+1] = aux ; } } Reescreva o algoritmo da ordenao por insero de forma a que a ordenao se faa por ordem decrescente.

Exerccio 57: (Ordenao por seleco ) Ordene os inteiros contidos no ficheiro de texto dados1.txt utilizando o algoritmo de ordenao por seleco. Guarde os dados ordenados no ficheiro o1_dados1.txt.

Exerccio 58: (BubbleSort ) Pretende-se ordenar o ficheiro binrio dados2.dat utilizando o mtodo de ordenao por borbulhagem. Os dados guardados neste ficheiro so estruturas do seguinte tipo: struct { int Num; char nome[80]; float nota; }; 1. Codifique um programa que produza um ficheiro que contenha os dados por ordem: (a) crescente do campo nome (guarde em o1_dados2.dat); (b) decrescente do campo nome (guarde em o2_dados2.dat). 2. Altere o programa anterior de forma a que, atravs dum menu, o utilizador possa escolher o campo usado como chave para a ordenao dos dados.

Exerccio 59: (Ordenao por fuso ) Implemente a funo fuso descrita na aula terica. Determine o tempo de execuo no pior caso. 1. Use a referida funo para implementar o mtodo de ordenao por fuso. Ordene o conjunto de valores do ficheiro dados1.txt. 2. Proceda s alteraes necessrias para ordenar os dados contidos no ficheiro dados2.dat composto por registos com estrutura igual j definida no exerccio anterior. O utilizador dever poder escolher a chave de ordenao.

Exerccio 60: (QuickSort ) Estude o comportamento do mtodo quicksort no caso do vector de entrada estar 1. ordenado por ordem decrescente; 2. ordenado por ordem crescente.

Exerccio 61: (Ordenao por Contagem ) Implemente o seguinte algoritmo de ordenao que s funciona se no existirem elementos negativos nem repetidos no vector a ordenar: Percorrer o vector e contar para cada elemento do vector, quantos so os elementos menores que ele. Se um elemento tiver c elementos menores ento a sua posio no vector ordenado ser c+1. Qual a sua complexidade?

Exerccio 62: (Bingo! ) Implemente um programa que simule o jogo do Bingo. Deve gerar sucessivamente (com o premir da tecla ENTER) nmeros aleatrios compreendidos entre 1 e 90 at que o utilizador digite a palavra BINGO. Para facilitar a verificao do carto premiado, aps o sorteio de um novo nmero deve apresentar a lista ordenada de todos os nmeros j sorteados. Sugesto: para melhorar a eficincia do seu programa, tire partido do facto de que quando um novo nmero sorteado a lista dos anteriores j se encontra ordenada.

Exerccio 63: Escreva um programa que ordene alfabeticamente, de forma crescente, as letras existente numa string previamente pedida ao utilizador. Esta ordenao dever ser efectuada num vector auxiliar que ser inicializado com os endereos de memria de cada uma das letras existente na string. A construo deste vector, o qual constitudo por endereos de memria, no poder alterar a string original. Utilize qualquer um dos mtodos de ordenao apresentados nas aulas.

Exerccio 64: Escreva um programa que recebendo um vector de nmeros naturais, os ordene por ordem decrescente tendo como critrio o nmero de ocorrncias de cada um no vector. Utilize o seguinte prottipo: void ordenaOcorrencias(int v[], int tamanho); Exemplo: Input: 1 5 5 5 3 3 2 5 1 3 1 1 5 Output: 5 5 5 5 5 1 1 1 1 3 3 3 2

Exerccio 65: Estude os algoritmos de ordenao apresentados nas aulas tericas (seleco, insero, borbulhagem, quicksort e fuso) e indique quais so estveis.

Vous aimerez peut-être aussi