Você está na página 1de 8

T198 – Construção e Análise de Algoritmos

Prof. Napoleão Nepomuceno


AV3 - Lab01

Exercício 1

Passo 1: Implementar o seguinte código em Java ou equivalente em outra linguagem de programação.


import java.util.Random;

public class Exercicio1 {

static class Aluno {


public String matricula;
public String nome;
public int creditos;

public Aluno() {
Random randomGenerator = new Random();
matricula = "";
for (int i = 1; i <= 9; i++) {
matricula += (char) ('0' + randomGenerator.nextInt(10));
}
nome = "";
nome += (char)('A' + randomGenerator.nextInt(26));
for (int i = 2; i <= 8; i++) {
nome += (char) ('a' + randomGenerator.nextInt(26));
}
creditos = randomGenerator.nextInt(121);
}
}

public static void main(String[] args) {


int n = 40;
Aluno[] alunos = new Aluno[n];
for (int i = 0; i < alunos.length; i++) {
alunos[i] = new Aluno();
}
imprime(alunos);
alunos = ordenaCreditos(alunos);
imprime(alunos);
alunos = ordenaMatricula(alunos);
imprime(alunos);
alunos = ordenaNome(alunos);
imprime(alunos);
}

static Aluno[] ordenaCreditos (Aluno[] A) {


Aluno[] B = new Aluno[A.length];
// to do
return B;
}

static Aluno[] ordenaMatricula (Aluno[] A) {


// to do
}

static Aluno[] ordenaNome (Aluno[] A) {


// to do
}

static void imprime (Aluno[] A) {


for (int i = 0; i < A.length; i++) {
System.out.printf("%-15s%-15s%10d\n", A[i].matricula, A[i].nome, A[i].creditos);
}
System.out.print("\n\n\n");
}
}

Passo 2: O vetor alunos armazena os dados de n alunos. Cada registro possui um campo matricula, um
campo nome e um campo creditos. Faça uma implementação do counting sort para ordenar os registros
do vetor pelo campo creditos, sabendo que a quantidade máxima de créditos é 120. Escreva a saída do seu
programa antes e após a ordenação do vetor. (40%)
Obs.1: A indexação em Java do vetor onde os registros são copiados vai de 0 até n-1.
static Aluno[] ordenaCreditos(Aluno[] A) {
Aluno[] B = new Aluno[A.length];

int count[] = new int[120+1];


for (int i = 0; i < 120+1; ++i)
count[i] = 0;

for (int i = 0; i < A.length; ++i)


Antes da ordenação.

641831437 Vwzmnisj 1
702865808 Twjvfhug 88
893949633 Vqbizfhu 92
913167424 Kbstdpai 36
589354996 Xblrhldv 2
647467033 Lbyqhyjs 46
930113164 Qzmojkqp 25
806457526 Tjtmjvlg 51
652633441 Sipokfzu 97
744532002 Uxhcqfmw 6
763175856 Aqwtrasp 35
301861920 Mqvpcdye 72
687302840 Xfueguqm 56
936087926 Tvltfefi 15
103119932 Qsdagifo 6
264364447 Vxjbxvif 53
310062252 Jkjdgobv 35
802842051 Tvqjpaaq 89
090176150 Ljuhtcxs 116
667923323 Fijatkas 82
776834428 Rkzideln 72
419570761 Bwwaakjl 92
217862913 Enrbkoik 17
974314489 Yeolnevl 94
234649524 Cjshcmta 108
448953781 Pcmettle 33
003728999 Qqsdmaqh 96
217775924 Tuvdscfe 15
177956172 Rszsqbhz 8
973158019 Nmfigilv 81
307042205 Gkvzrred 20
449632113 Jonpqaan 25
742568358 Mlgowzgj 114
649832634 Kadxfykz 41
143113244 Qhrregot 45
234973017 Stzwtmms 67
848399067 Chkbmvzz 70
845246320 Spqjgpgx 21
003469296 Yzernfgv 60
423808689 Ukqvcgvs 17
Depois da ordenação.

641831437 Vwzmnisj 1
589354996 Xblrhldv 2
744532002 Uxhcqfmw 6
103119932 Qsdagifo 6
177956172 Rszsqbhz 8
936087926 Tvltfefi 15
217775924 Tuvdscfe 15
217862913 Enrbkoik 17
423808689 Ukqvcgvs 17
307042205 Gkvzrred 20
845246320 Spqjgpgx 21
930113164 Qzmojkqp 25
449632113 Jonpqaan 25
448953781 Pcmettle 33
763175856 Aqwtrasp 35
310062252 Jkjdgobv 35
913167424 Kbstdpai 36
649832634 Kadxfykz 41
143113244 Qhrregot 45
647467033 Lbyqhyjs 46
806457526 Tjtmjvlg 51
264364447 Vxjbxvif 53
687302840 Xfueguqm 56
003469296 Yzernfgv 60
234973017 Stzwtmms 67
848399067 Chkbmvzz 70
301861920 Mqvpcdye 72
776834428 Rkzideln 72
973158019 Nmfigilv 81
667923323 Fijatkas 82
702865808 Twjvfhug 88
802842051 Tvqjpaaq 89
893949633 Vqbizfhu 92
419570761 Bwwaakjl 92
974314489 Yeolnevl 94
003728999 Qqsdmaqh 96
652633441 Sipokfzu 97
234649524 Cjshcmta 108
742568358 Mlgowzgj 114
090176150 Ljuhtcxs 116

Passo 3: Faça uma implementação do radix sort para ordenar os registros do vetor pelo campo matricula,
sabendo que uma matrícula possui 9 dígitos decimais. Escreva a saída do seu programa antes e após a
ordenação do vetor. (30%)
Obs.1: A indexação em Java do vetor onde os registros são copiados vai de 0 até n-1.
Obs.2: Para encontrar o dígito numérico da posição d = 0 .. 8 da matrícula, use:
int digito = (int) A[j].matricula.charAt(d) – '0';
public static Aluno getMaxMatricula(Aluno[] A, int n) {
Aluno max = A[0];

for (int i = 1; i < n; i++) {

if (A[i].matricula.length() > max.matricula.length()) {


max = A[i];
}
}

return max;
}

static public void countsortMatricula(Aluno[] A, int n, int d) {


Aluno[] B = new Aluno[A.length];

int count[] = new int[10];

for (int i = 0; i < 10; ++i)


count[i] = 0;

for (int i = 0; i < A.length; ++i) {


int digito = (int) A[i].matricula.charAt(d - 1) - '0';
++count[digito];
}
for (int i = 1; i < 10; ++i)
count[i] += count[i - 1];

for (int i = A.length - 1; i >= 0; i--) {


int digito = (int) A[i].matricula.charAt(d - 1) - '0';
B[count[digito] - 1] = A[i];
--count[digito];
}

for (int i = 0; i < A.length; ++i)


A[i] = B[i];
}

static public Aluno[] radixsortMatricula(Aluno[] A, int n) {


Aluno max = getMaxMatricula(A, n);

for (int d = max.matricula.length(); d > 0; d--) {


countsortMatricula(A, n, d);
}
return A;
}
static Aluno[] ordenaMatricula(Aluno[] A) {
Aluno[] B = new Aluno[A.length];

B = RadixSort.radixsortMatricula(A, 9);
return B;
}

Antes da ordenação.
834633718 Czsvdobs 117
653093223 Sdjvdafy 21
429496792 Xmnjmmyu 87
340794650 Odtzwcvp 67
922307285 Riqbcygz 34
592771672 Wtwmvcph 63
764609352 Ilqimhqf 101
Depois da ordenação.
004082949 Nwtwosfs 7
055400224 Jkpauovz 75
111133727 Ionoxqgp 26
113615053 Tvasyubg 89
117919507 Jncqpdfe 112
148992132 Afslfcyq 66
213484314 Ihhrjhja 52
Passo 4: Faça uma implementação do radix sort para ordenar os registros do vetor pelo campo nome,
assumindo que todo nome começa com um caractere maiúsculo (‘A’...‘Z’) seguido de 7 caracteres
minúsculos (‘a’...‘z’). Escreva a saída do seu programa antes e após a ordenação do vetor. (30%)
Obs.1: A indexação do vetor C onde se faz a contagem vai de 0 até 25.
Obs.2: Para encontrar o índice no vetor C referente ao caractere da posição d = 0 .. 7 do nome, use:
int digito = (int) A[j].nome.charAt(d) – 'A'; ou
int digito = (int) A[j].nome.charAt(d) – 'a'; de acordo com o caso
public static Aluno getMaxNome(Aluno[] A, int n) {
Aluno max = A[0];

for (int i = 1; i < n; i++) {

if (A[i].nome.length() > max.nome.length()) {


max = A[i];
}
}

return max;
}

static public void countsortNome(Aluno[] A, int n, int d) {


Aluno[] B = new Aluno[A.length];

int count[] = new int[26];

for (int i = 0; i < 26; ++i)


count[i] = 0;

for (int i = 0; i < A.length; ++i) {


int digito;
if (d == 0) {
digito = (int) A[i].nome.charAt(d) - 'A';
++count[digito];

} else {
digito = (int) A[i].nome.charAt(d) - 'a';
++count[digito];

for (int i = 1; i < 26; ++i)


count[i] += count[i - 1];

for (int i = A.length - 1; i >= 0; i--) {


int digito;
if (d == 0) {
digito = (int) A[i].nome.charAt(d) - 'A';
B[count[digito] - 1] = A[i];
--count[digito];
} else {
digito = (int) A[i].nome.charAt(d) - 'a';
B[count[digito] - 1] = A[i];
--count[digito];
}

for (int i = 0; i < A.length; ++i)


A[i] = B[i];

}
static Aluno[] ordenaNome(Aluno[] A) {
Aluno[] B = new Aluno[A.length];
// to do
B = RadixSort.radixsortNome(A, 25);
return B;
}

Antes da ordenação.
084903856 Dmuveafx 4
267441108 Hixukltg 63
710268093 Wjispycp 64
574799940 Nsmmizwh 117
821265036 Sioooinv 100
909553176 Xtrjgiph 78
505510166 Gjbgssum 101
251792662 Kxqtxzim 65
218027803 Fxiswcoq 109
800700396 Qtapwpff 23
454680835 Kaunsaie 102
108984990 Hoyaptqc 2
823596934 Qbsbfxhe 46
571483585 Cboweihg 107
686749644 Tftpsxuj 14
799344302 Rpimozic 12
045141467 Gpnurzjw 76
056591442 Motcxygh 58
761461886 Idzvwyeg 65
563711657 Ablbjtha 44
123374681 Pcwukpyj 26
841741560 Dnoqjuyp 109
493281080 Itijweea 96
123938943 Aantfgrn 55
780130601 Jvbemtol 2
673927607 Mbsbcgkx 50
946721516 Vjgcnslg 100
737571657 Cslwtarq 57
520126822 Daokcsdt 73
926674566 Kovandmj 0
266527479 Pmfkcmxi 38
157158423 Fpqjbwdx 112
893228329 Mktksdir 57
802956990 Pgbyuvjq 54
920739323 Ulhcrikm 24
790056055 Owmqbmlj 83
610348587 Tiddbmyt 34
702640193 Mxrbjiqe 105
663640082 Kzjefbei 27
209164190 Gmtgmhxy 56
Depois da ordenação.
123938943 Aantfgrn 55
563711657 Ablbjtha 44
571483585 Cboweihg 107
737571657 Cslwtarq 57
520126822 Daokcsdt 73
084903856 Dmuveafx 4
841741560 Dnoqjuyp 109

Passo 5: Indicar o nome dos integrantes da equipe que participaram efetivamente na resolução deste
laboratório. (0%)

Você também pode gostar