Quicksort

drozz preguntada 2 años antes

Hola amigos ando con problemas con quicksort, tengo que hacer una clase empleado con id, nombre, y sueldo. en la principal ingresar datos el usario eso ya lo hice pero con el metodo quicksort tengo que ordenarlos por medio de la id y no se como hacerlo, alguien me puede ayudar, se lo agradeceria mucho, es en java netbeans .

calse principal

import java.io.*;

public class Quicksort {
	public static BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in));

 

    public static void main(String[] args) throws IOException {

        // TODO code application logic here
        empleado a[]=new empleado[1];
        String nombre;

        int sueldo;

        int id;

 

        for(int i=0;i<a.length;i++){

            System.out.println("Ingrese nombre");

            nombre=entrada.readLine();

            System.out.println("Ingese id");

            id=Integer.parseInt(entrada.readLine());

            System.out.println("ingrse el sueldo");

            sueldo=Integer.parseInt(entrada.readLine());

 

            a[i]=new empleado(nombre, id,sueldo);

        }

        System.out.println("Id"+ "  |  "  + "Nombre" + "  |  "+"Sueldo");

	for(int i=0;i<a.length;i++){

 

            System.out.println(a[i].getId()+"   "+a[i].getNombre()+"   "+a[i].getSueldo());

        }

    }

}

clase empleado

public class empleado {

   //  int id;

    //rivate String nombre;

     //int sueldo;

    private int id;

    private String nombre;

    private int sueldo;

 

    public empleado(String nombre, int id, int sueldo) {

        this.id = id;

        this.nombre = nombre;

        this.sueldo = sueldo;

    }

 

    public empleado() {

        nombre="";

        id=0;

        sueldo=0;

    }

 

    public int getId() {

        return id;

    }

 

    public void setId(int id) {

        this.id = id;

    }

 

    public  String getNombre() {

        return nombre;

    }

 

    public void setNombre(String nombre) {

        this.nombre = nombre;

    }

 

    public int getSueldo() {

        return sueldo;

    }

 

    public void setSueldo(int sueldo) {

        this.sueldo = sueldo;

    }


}

1 Respuestas
Best Answer
snow Staff contestada 2 años antes

Solo al algoritmo de quick en lugar de entrada de un array de tipo entero entra un array de tipo empleado y en las condiciones en lugar de comparar los elementos de las posiciones del array, lo que comparas son los ids de los empleados en las posiciones del array

import java.io.*;
public class QuickParaEmpleado {
	
	public static void quicksortEmpleado(empleado A[], int izq, int der) {

	  empleado pivote=A[izq]; // tomamos primer elemento como pivote
	  int i=izq; // i realiza la búsqueda de izquierda a derecha
	  int j=der; // j realiza la búsqueda de derecha a izquierda
	  empleado aux;
	 
	  while(i<j){            // mientras no se crucen las búsquedas
		 while(A[i].getId()<=pivote.getId() && i<j) i++; // busca elemento mayor que pivote
		 while(A[j].getId()>pivote.getId()) j--;         // busca elemento menor que pivote
		 if (i<j) {                      // si no se han cruzado                      
			 aux= A[i];                  // los intercambia
			 A[i]=A[j];
			 A[j]=aux;
		 }
	   }
	   A[izq]=A[j]; // se coloca el pivote en su lugar de forma que tendremos
	   A[j]=pivote; // los menores a su izquierda y los mayores a su derecha
	   if(izq<j-1)
		  quicksortEmpleado(A,izq,j-1); // ordenamos subarray izquierdo
	   if(j+1 <der)
		  quicksortEmpleado(A,j+1,der); // ordenamos subarray derecho
	}
	
	public static void quicksort(int A[], int izq, int der) {

	  int pivote=A[izq]; // tomamos primer elemento como pivote
	  int i=izq; // i realiza la búsqueda de izquierda a derecha
	  int j=der; // j realiza la búsqueda de derecha a izquierda
	  int aux;
	 
	  while(i<j){            // mientras no se crucen las búsquedas
		 while(A[i]<=pivote && i<j) i++; // busca elemento mayor que pivote
		 while(A[j]>pivote) j--;         // busca elemento menor que pivote
		 if (i<j) {                      // si no se han cruzado                      
			 aux= A[i];                  // los intercambia
			 A[i]=A[j];
			 A[j]=aux;
		 }
	   }
	   A[izq]=A[j]; // se coloca el pivote en su lugar de forma que tendremos
	   A[j]=pivote; // los menores a su izquierda y los mayores a su derecha
	   if(izq<j-1)
		  quicksort(A,izq,j-1); // ordenamos subarray izquierdo
	   if(j+1 <der)
		  quicksort(A,j+1,der); // ordenamos subarray derecho
	}
	
	public static String imprimirArray(int[] array) {
		String cadena = "";
		for(int i = 0;i < array.length;i++) {
			cadena += " " + array[i];
		}
		return cadena;
	}
	
	public static void imprimirArrayEmpleado(empleado[] a) {
		for(int i = 0;i < a.length;i++) {
			System.out.println(a[i].getId()+"   "+a[i].getNombre()+"   "+a[i].getSueldo());
		}
	}
	
	public static void main (String... ass) {
		/*
		int[] x = {4,6,2,8,0,6,4,2,5,7,8,6,9,3,1};
		int izq = 0;
		int der = x.length -1;
		System.out.println(QuickParaEmpleado.imprimirArray(x));
		QuickParaEmpleado.quicksort(x,izq,der);
		System.out.println(QuickParaEmpleado.imprimirArray(x));
		* */
		try {
			BufferedReader entrada= new BufferedReader(new InputStreamReader(System.in));
			empleado a[]=new empleado[5];
			String nombre;
			int sueldo;
			int id;
			for(int i=0;i<a.length;i++) {
				System.out.println("Ingrese nombre");

				nombre=entrada.readLine();

				System.out.println("Ingese id");

				id=Integer.parseInt(entrada.readLine());

				System.out.println("ingrse el sueldo");

				sueldo=Integer.parseInt(entrada.readLine());
				a[i]=new empleado(nombre, id,sueldo);
			}
			QuickParaEmpleado.imprimirArrayEmpleado(a);
			int izq = 0;
			int der = a.length -1;
			QuickParaEmpleado.quicksortEmpleado(a,izq,der);
			
			System.out.println("=====ordenado=======");
			QuickParaEmpleado.imprimirArrayEmpleado(a);
		} catch(Exception e) {
			
		}
	}
}

Your Answer

5 + 4 =