Está en la página 1de 13

FACULTAD DE INGENIERÍA Y ARQUITECTURA

GUIA DE LABORATORIO Nro. 03


ESCUELA : INGENIERIA DE SISTEMAS

ASIGNATURA : ESTRUCTURA DE DATOS

CICLO : III

TURNO : MAÑANA Y NOCHE

SEMESTRE : 2023-2

DOCENTE :

I. TEMA:
Ordenación recursiva con QuickSort y MergeSort.

II. OBJETIVOS:

- Configurar el Netbeans 8.2.


- Desarrollar los ejercicios propuestos por el docente.

III. METODOLOGÍA:
- Solución de los ejercicios propuestos con la guía del docente.
- Realizar un informe de toda la secuencia del laboratorio propuesto.

IV. RECURSOS:
1. Equipo computacional con conexión a internet.
2. Utilizar la guía de instalación de Netbeans 8.2
3. Utilizar la plataforma Blackboard para entregar el laboratorio
4. Utilizar la plataforma de Zoom para la sustentación de laboratorio.

V. DESARROLLO DE ACTIVIDADES:
FACULTAD DE INGENIERÍA Y ARQUITECTURA

EJERCICIO DESARROLLADO # 01

Desarrollar una aplicación para realizar el registro de Alumnos. Los datos a almacenar son
dni, nombres, edad, promedio. Utilizar para este ejercicio ordenamiento recursivo
QuickSort.

Creando la clase Alumno:

public class Alumno {


String dni,nom;
int edad;
double prom;

public Alumno() {
}

public Alumno(String dni, String nom, int edad, double prom) {


this.dni = dni;
this.nom = nom;
this.edad = edad;
this.prom = prom;
}

public String getDni() {


return dni;
}

public void setDni(String dni) {


this.dni = dni;
}

public String getNom() {


return nom;
}

public void setNom(String nom) {


this.nom = nom;
}

public int getEdad() {


return edad;
}

public void setEdad(int edad) {


this.edad = edad;
}

public double getProm() {


return prom;
}
FACULTAD DE INGENIERÍA Y ARQUITECTURA

public void setProm(double prom) {


this.prom = prom;
}

Creando la clase QuickSort

public class Quick {

public void ordenarQ(Alumno[] array) {

array= quicksort1(array);

public Alumno[] quicksort1(Alumno numeros[]) {

return quicksort2(numeros, 0, numeros.length-1); //se entrega el arreglo,


posicion izquierda y derecha del arreglo

public Alumno[] quicksort2(Alumno numeros[], int izq, int der) { //recepciona

if (izq >= der) { //verifica que no haya cruce entre posiciones

return numeros;

int i = izq, d = der;

if (izq != der) { //realice los cambios

int pivote;

Alumno aux;

pivote = izq; //se asigna la izquierda al pivote

while (izq != der) {

while (numeros[der].getEdad() >= numeros[pivote].getEdad() && izq <


der) {
FACULTAD DE INGENIERÍA Y ARQUITECTURA

der--;

while (numeros[izq].getEdad()< numeros[pivote].getEdad() && izq < der)


{

izq++;

if (der != izq) {

aux = numeros[der];

numeros[der] = numeros[izq];

numeros[izq] = aux;

if (izq == der) {

quicksort2(numeros, i, izq - 1);

quicksort2(numeros, izq + 1, d);

} else {

return numeros;

return numeros;

Ingresando elementos a un arreglo de Alumnos para realizar el ordenamiento:

package Vista;

import Control.Merge;
FACULTAD DE INGENIERÍA Y ARQUITECTURA

import Control.Quick;

import Modelo.Alumno;

public class Consola {

public static void main(String[] args) {

Alumno[] array = new Alumno[3];

array[0] = new Alumno("41742587","Juan Perez",21,14);

array[1] = new Alumno("10587458","Diego Livano",27,11);

array[2] = new Alumno("52962858","Vania Salcedo",17,12);

System.out.println("ANTES DEL ORDENAMIENTO");

String cad="";

for(Alumno a:array) //recorre 1 hasta el N

cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";

System.out.println(cad);

Quick objQ = new Quick();

objQ.ordenarQ(array);

System.out.println("DESPUES DEL ORDENAMIENTO");

cad="";

for(Alumno a:array) //recorre 1 hasta el N


FACULTAD DE INGENIERÍA Y ARQUITECTURA

cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";

System.out.println(cad);

Como resultado tenemos:

Ahora realizaremos el mismo ejercicio con ordenamiento recursivo MergeSort:

Implementamos la clase Alumno:

package Modelo;

public class Alumno {

String dni,nom;

int edad;

double prom;

public Alumno() {
FACULTAD DE INGENIERÍA Y ARQUITECTURA

public Alumno(String dni, String nom, int edad, double prom) {

this.dni = dni;

this.nom = nom;

this.edad = edad;

this.prom = prom;

public String getDni() {

return dni;

public void setDni(String dni) {

this.dni = dni;

public String getNom() {

return nom;

public void setNom(String nom) {

this.nom = nom;

public int getEdad() {

return edad;
FACULTAD DE INGENIERÍA Y ARQUITECTURA

public void setEdad(int edad) {

this.edad = edad;

public double getProm() {

return prom;

public void setProm(double prom) {

this.prom = prom;

Luego implementamos la clase Mergesort

package Control;

import Modelo.Alumno;

public class Merge {

public void ordenarM(Alumno[] array) {

array = mergesort(array,0, array.length - 1);


FACULTAD DE INGENIERÍA Y ARQUITECTURA

public Alumno[] mergesort(Alumno vector[], int izq, int der) {

int mitad;

if (der > izq) {

mitad = (der + izq) / 2;

mergesort(vector, izq, mitad);

mergesort(vector, mitad + 1, der);

merge(vector, izq, mitad + 1, der);

return vector;

private void merge(Alumno vector[], int izq, int mitad, int der) {

Alumno[] aux = new Alumno[vector.length];//Vector auxiliar

int contador = 0;

int i = izq;//Indice de la parte izquierda

int j = mitad;//Indice de la parte derecha

int k = izq;//Indice del vector resultante

while ((i <= mitad - 1) && (j <= der)) {

//Mientras que i esta en la parte izq y j en la dcha

if (vector[i].getEdad() <= vector[j].getEdad()) {

aux[k++] = vector[i++];

} else {

aux[k++] = vector[j++];
FACULTAD DE INGENIERÍA Y ARQUITECTURA

//Copia los elementos que estaban en la posicion correcta:

while (i <= mitad - 1) {

aux[k++] = vector[i++];

while (j <= der) {

aux[k++] = vector[j++];

//Copia los elementos en el vector original

for (i = izq; i <= der; i++) {

vector[i] = aux[i];

}
FACULTAD DE INGENIERÍA Y ARQUITECTURA

Por último implementamos en modo consola el algoritmo recursivo MergeSort:

package Vista;

import Control.Merge;

import Control.Quick;

import Modelo.Alumno;

public class Consola {

public static void main(String[] args) {

Alumno[] array = new Alumno[3];

array[0] = new Alumno("41742587","Juan Perez",21,14);

array[1] = new Alumno("10587458","Diego Livano",27,11);

array[2] = new Alumno("52962858","Vania Salcedo",17,12);

System.out.println("ANTES DEL ORDENAMIENTO");

String cad="";

for(Alumno a:array) //recorre 1 hasta el N

cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";

System.out.println(cad);

Merge objM = new Merge();

objM.ordenarM(array);
FACULTAD DE INGENIERÍA Y ARQUITECTURA

System.out.println("DESPUES DEL ORDENAMIENTO");

cad="";

for(Alumno a:array) //recorre 1 hasta el N

cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";

System.out.println(cad);

Como resultado tenemos lo siguiente:


FACULTAD DE INGENIERÍA Y ARQUITECTURA

EJERCICIOS PROPUESTOS

EJERCICIO # 01
La empresa seguros S.A.C desea implementar una aplicación que permita el manejo de su
data, con los siguientes requerimientos:
Elabore un programa que ordene mediante QuickSort por codigo de los trabajadores que
incluyen código, nombre, apellido, sexo, edad, estado civil, área (Contabilidad o Finanzas),
fecha de ingreso (Formato SimpleDateFormat) y muestre una estadística que indique:
 Número de vocales totales, consonantes, dígitos, espacios en blanco y otros
símbolos, con su respectivo porcentaje.
 Número de trabajadores por sexo, numero de trabajadores por área, numero de
trabajadores por estado civil, numero de trabajadores mayores y menores de edad.

EJERCICIO # 02
Desarrollar una aplicación para realizar el registro de nuevos productos. Los datos a
almacenar son código, descripción, stock, stock mínimo y precio. Utilizar para este ejercicio
ordenamiento recursivo MergeSort.

EJERCICIO # 03
Desarrollar una aplicación para realizar el registro de clientes. Los datos a almacenar son
código, nombres, dni, genero, correo y celular. Utilizar para este ejercicio ordenamiento
recursivo QuickSort.

VI. RESULTADOS DE APRENDIZAJE ESPERADOS:


- El estudiante desarrolla los ejercicios propuestos utilizando el IDE Netbeans 8.2.

VII. RÚBRICA DE LA EVALUACIÓN

Inicio (M) Proceso (R) Logro previsto (R+) Logro satisfactorio (B)

0-10 11-13 14-17 18-20

Desarrollo Desarrollo Desarrollo Desarrollo


correctamente del correctamente del correctamente del correctamente del E
laboratorio hasta un laboratorio hasta un laboratorio hasta un Alaboratorio hasta un
50 % 60 % 80 % 100%

También podría gustarte