Algoritmos e Estrutura de Dados I - AE22CP - 2013/2 |
Bruno César Ribas |
Exercícios
- O que é Algoritmo?
Bubble, Selection e Inserção
- Implemente o Algoritmo Bubble Sort
- Modifique o seu Algoritmo Bubble Sort e faça ele imprimir quantas operações de troca e quantas comparações foram feitas.
- Implemente o Algoritmo Selection Sort
- Modifique o seu Algoritmo Selection Sort e faça ele imprimir quantas operações de troca e quantas comparações foram feitas.
- Compare o tempo de execução do Bubble e Selection sort para entradas aleatórias até 100000 elementos.
- Escreva uma versão recursiva do algoritmo de ordenação por seleção
- Na função selecao, que acontece se trocarmos "for (i = 0" por "for (i = 1"? Que acontece se trocarmos "for (i = 0; i < n-1" por "for (i = 0; i < n" ?
- Na função "menor", troque a comparação "v[j] < v[min]" por "v[j] <= v[min]". A nova função continua produzindo uma ordenando crescente de v[0..n-1]?
- Escreva uma função que permute os elementos de um vetor inteiro v[0..n-1] de modo que eles fiquem em ordem decrescente.
- Escreva uma função que coloque em ordem lexicográfica um vetor de strings. Use o algoritmo de seleção.
- Resolva a questão 3 da Segunda de prova de 2012-1
- Suponha que cada elemento de um vetor é um registro com dois campos: um
é um inteiro e outro uma string:
struct registro {int aa; char *bb;};
Escreva uma função que rearranje o vetor de modo que os campos aa fiquem em ordem crescente. Escreva outra função que rearranje o vetor de modo que os campos bb fiquem em ordem lexicográfica. - Implemente o Algoritmo de Ordenação por Inserção
- Escreva uma versão recursiva do algoritmo de ordenação por inserção.
- Na função insercao, troque a comparação "v[i] > x" por "v[i] >= x". A nova função continua produzindo uma ordenação crescente de v[0..n-1]?
- Que acontece se trocarmos "for (j = 1" por "for (j = 0" no código da função insercao?
- Que acontece se trocarmos "v[i+1] = x" por "v[i] = x" no código da função insercao?
- O papel do for interno na função insercao é encontrar o ponto onde v[j] deve ser inserido em v[0..j-1]. Considere fazer isso com uma busca binária. Analise o resultado.
- Escreva uma função que permute os elementos de um vetor inteiro v[0..n-1] de modo que eles fiquem em ordem decrescente.
- Escreva uma função que coloque em ordem lexicográfica um vetor de strings. Use o algoritmo de inserção.
--
Last Modified: Tue Jan 21 18:52:11 2014.