import java.util.Scanner; /** * Clase de Alumnos utilizada para probar la clase de ordenamiento por recipientes * @author Amparo López Gaona * @version 1a. ed. */ class Alumno { private String nombre; // Nombre del alumno private int aciertos; // Numero de aciertos en su examen /** * Constructor del alumno a partir de su nombre * @param n -- nombre del alumno */ public Alumno(String n) { nombre = n; aciertos = 0; } /** * Método para obtener los datos del alumno en forma de cadena * @return String -- datos del alumno */ public String toString() { return nombre+" "+aciertos; } /** * Método para asignar aciertos a un alumno * @param puntos -- cantidad de aciertos */ public void asignarAciertos(int puntos) { aciertos = puntos; } /** * Metodo para obtener la cantidad de aciertos de un alumno * @return int -- cantidad de aciertos */ public int obtenerAciertos() { return aciertos; } } /** * Clase que implementa el ordenamiento por recipientes llamado binsort * @author Amparo Lopez Gaona * @version 1a. ed. */ public class BinSort { /** * Método para implementar el algoritmo de ordenamiento por recipientes * @param datos -- Lista con los datos a ordenar * @param rango -- rango en que estan los datos a ordenar */ public static void ordenamientoPorRecipientes (Lista datos, int rango) { if (rango <= 0) return; Lista[] recipiente = new Lista[rango + 1]; for (int i = 0; i < rango; i++) recipiente[i] = new Lista(); //Distribuye la información en los recipientes java.util.Iterator it = datos.iterador(); while (it.hasNext()) { Alumno alum = (Alumno) it.next(); recipiente[alum.obtenerAciertos()].agregar(alum); } //Recoge la información de los recipientes datos.vaciar(); for (int i = 0; i < rango; i++){ it = recipiente[i].iterador(); while (it.hasNext()) datos.agregar(it.next()); } } public static void main (String [] pps) { BinSort bs = new BinSort(); Lista listaAlumnos = new Lista(); Alumno alum = null; // Creacion de una lista de 500 alumnos con un maximo de 120 aciertos cada uno for(int i = 0; i < 500; i++) { alum = new Alumno("alum"+i); int ac= (int) (Math.random()*120); alum.asignarAciertos(ac); listaAlumnos.agregar(alum); } // Imprime la lista de alumnos for (java.util.Iterator it = listaAlumnos.iterador(); it.hasNext(); ) { System.out.print((Alumno)it.next()+ " "); } // Ordena la lista de alumnos bs.ordenamientoPorRecipientes(listaAlumnos, 120); System.out.println("\n\n Oprimir cualquier tecla para ver la lista ordenada\n"); new Scanner(System.in).nextLine(); // Muestra la lista ordenada for (java.util.Iterator it = listaAlumnos.iterador(); it.hasNext(); ) { System.out.println((Alumno)it.next()); } } }