Foros del Web » Programación para mayores de 30 ;) » Java »

Ordenar ArrayList de enteros

Estas en el tema de Ordenar ArrayList de enteros en el foro de Java en Foros del Web. Buenas tardes , lo que pasa es que e intentado de 1 y mil maneras como ordenar un ArrayList de int , no lo e ...
  #1 (permalink)  
Antiguo 02/10/2011, 16:20
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta Ordenar ArrayList de enteros

Buenas tardes , lo que pasa es que e intentado de 1 y mil maneras como ordenar un ArrayList de int , no lo e logrado , lo necesito hacer pero sin la clase Collections

Al que me pueda ayudar se lo agradezco enserio
  #2 (permalink)  
Antiguo 02/10/2011, 17:03
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 5 meses
Puntos: 416
Respuesta: Ordenar ArrayList de enteros

Muéstranos lo que haz intentado. ¿Es con el algoritmo de ordenación (u ordenamiento, ¿cual es la forma correcta de decirlo?) que tienes el inconveniente o con qué exactamente?
  #3 (permalink)  
Antiguo 02/10/2011, 17:31
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Ordenar ArrayList de enteros

Código:
Elabore un programa que lea dos arreglos de diferente número de elementos, los ordene y posteriormente los  mezcle en un tercer arreglo guardando el orden. 
Ho hay repetidos. 

//Hallamos el menor de todo el arreglo
		
		ArrayList <Integer> Resul= new ArrayList<Integer>();
		
		int menor = v1.get(0), mayor=0;
		int uno;
		for(int j=0;j<v1.size();++j)
		{
            if(v1.get(j)<menor)
            {
                    menor=v1.get(j);
            }
		}
		
		for(int j=1;j<v1.size()-1;++j)
		{
            if(v1.get(j)>mayor)
            {
                    mayor=v1.get(j);
            }
		}
		Resul.add(menor);
		uno=menor;
		uno++;
		int con=1;
		System.out.println(mayor);
		for(int i=1;i<mayor;i++)
		{
			if(v1.contains(uno)==true)
			{
				Resul.add(v1.get(con));
				con++;
			}
			else
				uno++;
		}
		return Resul;
Llevo eso , lo cual no esta nada bien , necesito que me ordene un ArrayList

Ejemplo : tengo [3,4,57,3,2,1] , que me quede asi
[1,2,3,3,4,57]
  #4 (permalink)  
Antiguo 03/10/2011, 05:14
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Ordenar ArrayList de enteros

Prueba así. Este método es llamado ordenamiento por selección (el que has intentado hacer) y es muy ineficiente.

Puedes intentar crear el algoritmo de ordenamiento por inserción que a lo mejor te viene mejor.

Código Java:
Ver original
  1. public static ArrayList<Integer> ordenar(ArrayList<Integer> vector){
  2. //Hallamos el menor de todo el arreglo
  3.        
  4.         ArrayList <Integer> Resultado= new ArrayList<Integer>(vector);
  5.        
  6.         int indice,menor;
  7.         int aux;
  8.        
  9.         for(int i=0;i<Resultado.size();i++){      
  10.        
  11.         menor = Resultado.get(i);
  12.         indice = i;
  13.         aux = 0;
  14.        
  15.         for(int j=i+1;j<Resultado.size();j++){
  16.             aux = Resultado.get(j);
  17.             indice = aux < menor ? j : indice;
  18.             menor = aux < menor ? aux : menor;
  19.         }
  20.        
  21.        
  22.         Resultado.set(indice,Resultado.get(i));
  23.         Resultado.set(i,menor);
  24.        
  25. }
  26. return Resultado;
  27.  
  28. }

EDITO: Un ejemplo de ordenación por inserción

Código Java:
Ver original
  1. public static ArrayList<Integer> ordenarInsertando(ArrayList<Integer> vector){
  2.  
  3.        
  4.         ArrayList <Integer> Resultado= new ArrayList<Integer>();
  5.        
  6.        
  7.  
  8.       int valor;  
  9.       boolean insertado_antes =false;
  10.       Resultado.add(vector.get(0));
  11.      
  12.       for (int i=1;i<vector.size();i++) {
  13.           insertado_antes = false;
  14.           valor = vector.get(i);
  15.           int length = Resultado.size();
  16.           for(int j=0;j<length;j++){              
  17.               if (Resultado.get(j)>=valor){
  18.                   Resultado.add(j, valor);
  19.                   insertado_antes = true;
  20.               }
  21.           }        
  22.           if (!insertado_antes)
  23.            Resultado.add(valor);
  24.       }
  25.    
  26. return Resultado;
  27.  
  28. }

Última edición por alexg88; 03/10/2011 a las 06:02
  #5 (permalink)  
Antiguo 03/10/2011, 20:26
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Ordenar ArrayList de enteros

Muchas gracias Alex , pero me gustaria que me dijieras porfabor para que es esta linea :

Cita:
indice = aux < menor ? j : indice;
Para que es el --- ? j : indice
  #6 (permalink)  
Antiguo 03/10/2011, 21:20
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 5 meses
Puntos: 416
Respuesta: Ordenar ArrayList de enteros

? : es el operador ternario, es un if resumido.
if(condicion) {
//hago eso
} else {
//esto otro
}
Se resume en:
condicion ? /* hago esto */ : /*sino esto */;
  #7 (permalink)  
Antiguo 03/10/2011, 21:51
 
Fecha de Ingreso: octubre-2011
Mensajes: 7
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Ordenar ArrayList de enteros

Cita:
Iniciado por Ronruby Ver Mensaje
? : es el operador ternario, es un if resumido.
if(condicion) {
//hago eso
} else {
//esto otro
}
Se resume en:
condicion ? /* hago esto */ : /*sino esto */;
Gracias Ron , no sabia de esto
  #8 (permalink)  
Antiguo 04/10/2011, 01:15
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Ordenar ArrayList de enteros

Como ya te ha respondido Ronruby a tu pregunta, sólo quiero decirte que estos algoritmos que he puesto de ejemplos están abiertos a mejoras (los hice rápido) y que existen algoritmos mucho más eficientes para implementar una ordenación.

También es importante que consideres el uso que vas a hacer de la ordenación. Si es para aprender es válido, pero si lo necesitas para algo más serio deberías utilizar el método sort de la clase Collections que está optimizado muchísimo más de lo que podría hacerlo cualquiera (en principio).

Saludos.

Etiquetas: arraylist, enteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:36.