Skip to content

Commit aa67690

Browse files
committed
metodo heap nao esta funcioando
1 parent 47a98e2 commit aa67690

File tree

1 file changed

+84
-15
lines changed

1 file changed

+84
-15
lines changed

nba/ordenacao/src/App.java

Lines changed: 84 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
public class App {
66
static Ordenate ordenate = new Ordenate();
77
static Scanner s = new Scanner(System.in);
8-
static String pathInputFile = "/tmp/jogadores.txt";
9-
// static String pathInputFile = "S:\\Users\\José Victor\\dev\\algorithm-and-data-structures-II\\nba\\ordenacao\\src\\jogadores.txt";
8+
// static String pathInputFile = "/tmp/jogadores.txt";
9+
static String pathInputFile = "S:\\Users\\José Victor\\dev\\algorithm-and-data-structures-II\\nba\\ordenacao\\src\\jogadores.txt";
1010
// static String pathInputFile =
1111
// "/home/jose/coding/algorithm-and-data-structures-II/nba/ordenacao/src/jogadores.txt";
1212

@@ -71,7 +71,13 @@ public static void main(String[] args) {
7171
// }
7272

7373
// Método InsertionSort
74-
orderedJogadores = ordenate.insertion_sort(orderedJogadores);
74+
// orderedJogadores = ordenate.insertion_sort(orderedJogadores);
75+
// for (Jogador jogador : orderedJogadores) {
76+
// jogador.imprimir();
77+
// }
78+
79+
// Método HeapSort
80+
orderedJogadores = ordenate.heapSort(orderedJogadores);
7581
for (Jogador jogador : orderedJogadores) {
7682
jogador.imprimir();
7783
}
@@ -421,31 +427,94 @@ public Jogador[] selection_sort(Jogador[] arr) {
421427
}
422428

423429
public Jogador[] insertion_sort(Jogador[] arr) {
424-
Jogador[] vetor = arr;
430+
Jogador[] jogadoresOrdenados = arr;
425431

426-
for (int i = 1; i < vetor.length; i++) {
427-
Jogador temp = vetor[i];
432+
for (int i = 1; i < jogadoresOrdenados.length; i++) {
433+
Jogador temp = jogadoresOrdenados[i];
428434
int j = i - 1;
429435

430-
while (j >= 0 && vetor[j].getAnoNascimento() > temp.getAnoNascimento()) {
431-
vetor[j + 1] = vetor[j];
436+
// faz a ordenação por ano de nascimento
437+
while (j >= 0 && jogadoresOrdenados[j].getAnoNascimento() > temp.getAnoNascimento()) {
438+
jogadoresOrdenados[j + 1] = jogadoresOrdenados[j];
432439
j--;
433440
}
434441

435-
if (j >= 0 && vetor[j].getAnoNascimento() == temp.getAnoNascimento()) {
436-
int cmp = vetor[j].getNome().compareToIgnoreCase(temp.getNome());
437-
while (j >= 0 && vetor[j].getAnoNascimento() == temp.getAnoNascimento() && cmp > 0) {
438-
vetor[j + 1] = vetor[j];
442+
// caso ano for igual, verifica os nomes
443+
if (j >= 0 && jogadoresOrdenados[j].getAnoNascimento() == temp.getAnoNascimento()) {
444+
// ordena por ordem alfabética
445+
int cmp = jogadoresOrdenados[j].getNome().compareToIgnoreCase(temp.getNome());
446+
while (j >= 0 && cmp > 0 &&
447+
jogadoresOrdenados[j].getAnoNascimento() == temp.getAnoNascimento()) {
448+
jogadoresOrdenados[j + 1] = jogadoresOrdenados[j];
439449
j--;
440450
if (j >= 0) {
441-
cmp = vetor[j].getNome().compareToIgnoreCase(temp.getNome());
451+
// caso ainda existirem elementos anteriores, atualiza os nomes a serem
452+
// comparados
453+
cmp = jogadoresOrdenados[j].getNome().compareToIgnoreCase(temp.getNome());
442454
}
443455
}
444456
}
445457

446-
vetor[j + 1] = temp;
458+
jogadoresOrdenados[j + 1] = temp;
447459
}
448-
return vetor;
460+
return jogadoresOrdenados;
461+
}
462+
463+
public void criaHeap(Jogador[] arr, Integer i, Integer f) {
464+
Jogador aux = arr[i];
465+
Integer j = i * 2 + 1;
466+
while (j <= f) {
467+
if (j < f) {
468+
// verifica quem é o maior entre os dois decendentes
469+
if (arr[j].getAltura() < arr[j + 1].getAltura()) {
470+
j = j + 1;
471+
} else if (arr[j].getAltura() == arr[j + 1].getAltura()) {
472+
// caso os anos forem igual ordena pelo nome
473+
if (arr[j].getNome().compareTo(arr[j + 1].getNome()) < 0) {
474+
j = j + 1;
475+
}
476+
}
477+
}
478+
// caso o maior descendente for maior que o pai, ele se torna o pai
479+
if (aux.getAltura() < arr[j].getAltura()) {
480+
arr[i] = arr[j];
481+
i = j;
482+
j = 2 * i + 1;
483+
} else if (aux.getAltura() == arr[j].getAltura()) {
484+
// caso os anos forem igual ordena pelo nome
485+
if (aux.getNome().compareTo(arr[j].getNome()) < 0) {
486+
arr[i] = arr[j];
487+
i = j;
488+
j = 2 * i + 1;
489+
}
490+
} else {
491+
j = f + 1;
492+
}
493+
494+
// antigo pai, se torna o ultimo filho analisado
495+
arr[i] = aux;
496+
}
497+
}
498+
499+
public Jogador[] heapSort(Jogador[] arr) {
500+
Jogador[] jogadoresOrdenados = arr; // armazena o vetor
501+
Integer n = jogadoresOrdenados.length, i;
502+
503+
// cria heap com os dados
504+
for (i = (n - 1) / 2; i >= 0; i--)
505+
criaHeap(jogadoresOrdenados, i, n - 1);
506+
507+
for (i = n - 1; i >= 0; i--) {
508+
// Coloca o maior elemento na posição correspondente
509+
Jogador aux = jogadoresOrdenados[0];
510+
jogadoresOrdenados[0] = jogadoresOrdenados[i];
511+
jogadoresOrdenados[i] = aux;
512+
513+
// reconstrói heap
514+
criaHeap(jogadoresOrdenados, 0, i - 1);
515+
}
516+
517+
return jogadoresOrdenados;
449518
}
450519
}
451520
}

0 commit comments

Comments
 (0)