Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Tada en 2 Abril 2016, 16:57 pm



Título: Ayuda con ordenamiento de nombres y numeros
Publicado por: Tada en 2 Abril 2016, 16:57 pm
hola necesito saber como sacar un listado de estudiantes con sus promedios de cada unidad formativa ordenado de forma alfabética y por orden de mérito. lo de ordenar los nombres si me lo hago pero de promedios de cada unidad no se como hacerlo .por cierto son 4 unidades.

este código es para ingresar los nombres de los estudiantes
Código:
 public static String[] Estudiantes(String[] Nombres, int[] Practicas, int[] Trabajos, int[] ExamenUnidad, int[] NotaUnidad) throws IOException {
 
        for (int i = 0; i < Nombres.length; i++) {
            Tada("Ingrese Nombre N°" + (i + 1) + ":");
            Nombres[i] = LeerCadena();
            Tada("\n");
            Notas(Practicas, Trabajos, ExamenUnidad, NotaUnidad);
        }
        return Nombres;
    }
y este es para las notas
Código:
public static int[] Notas(int[] Practicas, int[] Trabajos, int[] ExamenUnidad, int[] NotaUnidad) throws IOException {
 
        for (int i = 0; i < Practicas.length; i++) {
            Tada("╔════" + "         Notas del la unidad Nº" + (i + 1) + "        ════╗" + "\n");
            Tada(" Ingrese la nota de Practicas: ");
            Practicas[i] = LeerDato();
            Tada(" Ingrese la nota de Trabajos: ");
            Trabajos[i] = LeerDato();
            Tada(" Ingrese la nota de ExamenUnidad: ");
            ExamenUnidad[i] = LeerDato();
            NotaUnidad[i] = (Practicas[i] + Trabajos[i] + ExamenUnidad[i]) / 3;
            Tada("╚════" + " La nota de unidad del estudiante es:" + NotaUnidad[i] + " ════╝" + "\n");
            Tada("\n");
        }
        return NotaUnidad;
 
    }
Lo que quiero encontrar es como ordenar de manera numérica los promedios de cada unidad formativa
en este código o algún otro que me proporcionen
Código:
public static void Burbuja(String[] x, int[] NotaUnidad) {
        for (int i = 0; i < (x.length); i++) {
            for (int j = 0; j < (x.length - 1); j++) {
                if (x[j].compareToIgnoreCase((x[j + 1])) > 0) {
                    String ordenarnombre = x[j];
                    x[j] = x[j + 1];
                    x[j + 1] = ordenarnombre;
                    int OrdenarNota = NotaUnidad[j];
                    NotaUnidad[j] = NotaUnidad[j + 1];
                    NotaUnidad[j + 1] = OrdenarNota;
 
                }
            }
        }
 
    }
al final quiero mostrar algo así
ejemplo de los nombres ordenados y que salgo a su costado los promedios de cada unidad ordenado de forma numérica

nombres ordenados          promediosUnidadOrdenados
ana                                     12
                                          15
                                          18
kevin                                    02
                                          10
                                          12
zus                                      15
                                          16
                                          19
algo así


Título: Re: Ayuda con ordenamiento de nombres y numeros
Publicado por: LaiaxanIV en 2 Abril 2016, 17:08 pm
Si no he entendido mal quieres ordenar las notas de cada alumno que tienes dentro de 3 arrays diferentes (practicas,trabajos,examenUnidad,notaunidad)?
El algoritmo buble sort (burbuja) es el algoritmo de ordenación más ineficiente de todos :P


Título: Re: Ayuda con ordenamiento de nombres y numeros
Publicado por: Tada en 2 Abril 2016, 17:33 pm
si pudieras al menos pasarme una linea de código de poder ordenarlos seria genial
por favor


Título: Re: Ayuda con ordenamiento de nombres y numeros
Publicado por: LaiaxanIV en 2 Abril 2016, 23:44 pm
Perdona que no te haya respondido antes.
Código:
static void mergeSort(int[] A) {
        if (A.length > 1) {
            int q = A.length/2;
            int[] leftArray = new int[q];
            for(int i = 0; i < q;++i){
                leftArray[i]=A[i];
            }
            int[] rightArray = new int[A.length - q];
            for(int i = q; i < A.length; ++i){
                rightArray[i-q]=A[i];
            }

            mergeSort(leftArray);
            mergeSort(rightArray);

            merge(A,leftArray,rightArray);
        }
    }

    static void merge(int[] a, int[] l, int[] r) {
        int totElem = l.length + r.length;
        int i,li,ri;
        i = li = ri = 0;
        while ( i < totElem) {
            if ((li < l.length) && (ri<r.length)) {
                if (l[li] < r[ri]) {
                    a[i] = l[li];
                    i++;
                    li++;
                }
                else {
                    a[i] = r[ri];
                    i++;
                    ri++;
                }
            }
            else {
                if (li >= l.length) {
                    while (ri < r.length) {
                        a[i] = r[ri];
                        i++;
                        ri++;
                    }
                }
                if (ri >= r.length) {
                    while (li < l.length) {
                        a[i] = l[li];
                        li++;
                        i++;
                    }
                }
            }
        }
    }

Este algoritmo, merge sort ordena un int[] del tamaño que sea de menor a mayor.
Si puedes usar alguna libreria, si haces import java.util.Arrays, tienes la opción de usar la función Arrays.sort(Object[] A).