ARTICLE AD BOX
Im making a presentation as homework about it, there's barely any information of it, i been working with chatgpt and some youtube video, my question is, whenever i write same numbers, for example, changing the 1 next to a 3, for a 3, so this way 3 and 3 compete, the program ends up leaving a 0 in my finish array, i also need help with any addition you could add to it, or correction. This is my code:
import java.util.Scanner; class Jugador { int valor; public Jugador(int valor) { this.valor = valor; } public int getValor() { return valor; } } class Nodo { Jugador jugador; Nodo izquierda; Nodo derecha; public Nodo(Jugador jugador) { this.jugador = jugador; } public Nodo(Nodo izquierda, Nodo derecha) { this.izquierda = izquierda; this.derecha = derecha; } } class ArbolTorneo { Nodo raiz; public ArbolTorneo(Jugador[] jugadores) { raiz = construirArbol(jugadores, 0, jugadores.length - 1); } private Nodo construirArbol(Jugador[] jugadores, int inicio, int fin) { if (inicio == fin) { return new Nodo(jugadores[inicio]); } int mitad = (inicio + fin) / 2; Nodo izquierda = construirArbol(jugadores, inicio, mitad); Nodo derecha = construirArbol(jugadores, mitad + 1, fin); Nodo padre = new Nodo(izquierda, derecha); padre.jugador = seleccionarGanador(izquierda.jugador, derecha.jugador); return padre; } private Jugador seleccionarGanador(Jugador a, Jugador b) { return (a.getValor() <= b.getValor()) ? a : b; } public Jugador obtenerCampeon() { return raiz.jugador; } public void eliminarCampeon() { int valorCampeon = raiz.jugador.getValor(); reemplazarJugador(raiz, valorCampeon); recalcularGanadores(raiz); } private void reemplazarJugador(Nodo nodo, int valorBuscado) { if (nodo.izquierda == null && nodo.derecha == null) { if (nodo.jugador.getValor() == valorBuscado) { nodo.jugador = new Jugador(Integer.MAX_VALUE); } return; } reemplazarJugador(nodo.izquierda, valorBuscado); reemplazarJugador(nodo.derecha, valorBuscado); } private void recalcularGanadores(Nodo nodo) { if (nodo.izquierda == null) { return; } recalcularGanadores(nodo.izquierda); recalcularGanadores(nodo.derecha); nodo.jugador = seleccionarGanador(nodo.izquierda.jugador, nodo.derecha.jugador); } } class TournamentSort { public int[] ordenar(int[] arreglo) { Scanner leer = new Scanner(System.in); Jugador[] jugadores = new Jugador[arreglo.length]; for (int i = 0; i < arreglo.length; i++) { jugadores[i] = new Jugador(arreglo[i]); } ArbolTorneo torneo = new ArbolTorneo(jugadores); int[] salida = new int[arreglo.length]; System.out.println("Iniciando Tournament Sort..."); System.out.println("Presiona ENTER para comenzar."); leer.nextLine(); for (int i = 0; i < arreglo.length; i++) { System.out.println("\n==============================="); System.out.println("Ronda " + (i + 1)); Jugador campeon = torneo.obtenerCampeon(); int valorCampeon = campeon.getValor(); if (valorCampeon == Integer.MAX_VALUE) { // Ya no hay jugadores reales → rompemos el ciclo break; } salida[i] = valorCampeon; System.out.println("Campeón extraído: " + campeon.getValor()); System.out.print("Arreglo de salida: "); mostrarArreglo(salida); torneo.eliminarCampeon(); System.out.println("Presiona ENTER para continuar..."); leer.nextLine(); } return salida; } private void mostrarArreglo(int[] arr) { System.out.print("[ "); for (int n : arr) { if (n == 0) { System.out.print("_ "); } else { System.out.print(n + " "); } } System.out.println("]"); } } public class Main { public static void main(String[] args) { int[] jugadores = {10, 4, 12, 9, 3, 1, 7, 8}; TournamentSort ts = new TournamentSort(); int[] ordenado = ts.ordenar(jugadores); System.out.println("\n==============================="); System.out.println("Resultado final ordenado:"); for (int n : ordenado) { System.out.print(n + " "); } } }