Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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
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
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
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.

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).