Java - Como generaliar el metodo de ordenamiento?

   
Vista:

Como generaliar el metodo de ordenamiento?

Publicado por yael (5 intervenciones) el 04/03/2009 03:23:41
U saludo a todos

Necesito ayuda para realizar un metodos de ordenamiento por el metodo de la burbuja para que ordene cualquier tipo de elementos.

Pongo las intrucciones que me dieron para que me entiendan mejor y ojala me puedan ayudar

El siguiente método ordena una lista de números decimales por el método de la burbuja:

(1) static void ordenar (double lista[]) {
(2) for (int i = 0; i < lista.length; i++)
(3) for (int j = lista.length-1; j > i; j--)
(4) if (lista[j] < lista[j-1]) intercambiar (lista, j, j-1); (4)
}

Instruccion: Generaliza la función ordenar para que ordene elementos de cualquier tipo sobre los que tenga sentido definir una relación de orden. Para ello, introducir una mínima modificación en las líneas 1 y 4, y definir las clases y/o interfaces adicionales que sean necesarias.

Lo que eh intentado hacer es definir el parametro de la funcion como "object lista[]"
pero no encuentro la forma de hacer la comparacion en la sentencia "if(....)"
eh probado con los metodos predefinidos "compareTo" y "compare" pero no logro hacer que compile.
La verdad no estoy muy familarizado con estos metodos y no se si este bien en emprealos aqui o si deberia de usar otra forma para hacer la comparacion entre objetos, asi que les pido que si esta bien o k lo mas correcto es usar estos metodos me puedan explicar como emplearlos.

De antemano les doy las gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como generaliar el metodo de ordenamiento?

Publicado por Tom (911 intervenciones) el 04/03/2009 09:31:53
Mira la documentación de

Object.equals();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como generaliar el metodo de ordenamiento?

Publicado por mario (622 intervenciones) el 04/03/2009 16:47:56
Esta facil mi chavo

implementa la interfaz Comparable a cada uno de los tipos de datos q deseas ordenar, personas, perros,,peras etc

ejemplo

public class Persona implements Comparable {

private String nombre;


// implementas el metodo public int compareTo(Object o)

public int compareTo(Object o) {
//casteas porq necesitas un nombre

Persona p = (Persona) o;

// ahora en este metodo por alguna logica de negocio dices quien es menor
//mayor o igual

return nombre.compareTo(p.nombre);
}

}

en tu metodo de burbuja

comparas los objetos usando la interfaz Comparable en el if

if(obj1.compareTo(obj2)) {

}

de esa manera puedes ordernar con ese mismo metodo cualquier objeto que implemente la interfaz Comparable

como v ex facil no crees
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como generaliar el metodo de ordenamiento?

Publicado por yael (5 intervenciones) el 06/03/2009 10:13:03
Te agradesco tu ayuda
La verdad no habia comprendido como implementar el metodo "compareTo" hasta ahorita k me vienes explicando.
Pero por ejemplo para seguir ordenando enteros( int ), o por ejemplo una lista de nombres( string ) con ese mismo metodo??
Pork por lo k te entiendo tengo k implementar "Comparable" en cada tipo de dato k quiero ordenar, pero para cuando sea "int" o "string", como lo implemento en estos???

No se si se pueda hacer eso. Lo que pasa esk segun el problema eso es lo que entiendo, k puedo darle una lista de cualquier tipo de elementos y el metodo lo tiene k ordenar.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como generaliar el metodo de ordenamiento?

Publicado por mario (622 intervenciones) el 06/03/2009 15:49:53
Tienes que usar en lugar del tipo de dato primitivo int el Integer,

ambos Integer y String implementan Comparable.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como generaliar el metodo de ordenamiento?

Publicado por yael (5 intervenciones) el 07/03/2009 21:05:45
oy mira no eh podido hacer funcionar este metodo. Te muestro lo que eh querido hacer aprovechando la ayuda que me has dado para ver si me puedes corregir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Ordenar implements Comparable{
 
    static void ordenar ( Object lista[] ) {
        for( int i=0 ; i<lista.length ; i++ )
            for( int j=lista.length-1 ; j>i ; j-- )
//              if( lista[j].compareTo(lista[j-1]) < 0 )
                if( lista[j].compareTo(lista[j-1]) )
                    intercambiar( lista, j, j-1 );
    }
 
    private static void intercambiar( Object[] lista, int j, int i ){
        Object temp;
        temp = lista[i];
        lista[i] = lista[j];
        lista[j] = temp;
    }
 
    public static void main( String [] args ){
        String a[] = {"juan","yael","armando", "laura", "bray"};
        ordenar(a);
        for( int i=0 ; i<a.length ; i++ ){
            System.out.println( a[i] );
        }
    }
}

Lo que no eh podido es implementar la interface Comparable en el caso de que lo que quiera ordenar es una lista de "String" o si fuera de "Int".

Mi duda es que si se puede generalizar el metodo para cuando quiera organizar una lista solo llame a esta funcion pasandole como parametro una lista (sea de cualquier tipo). o tengo que ir cambiandole el tipo de dato a ordenar en cada clase????

Si se puede y tienes tiempo haber si puedes corregir bien este programa.

Gracias por todo
y que estes bien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar