Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/10/2010, 17:33
chilly
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: URGENTE. Divide y vencerás

Tengo un ArrayList de números ordenados --> "Conjunto"
Me piden, para un número "X", encontrar la posición "n" tal que:
Conjunto(n) <= X <= Conjunto(n+1)

Para simplificar el problema, resto "X" a cada uno de los elementos de "Conjunto" y lo guardo en "lista". Lo que tengo que buscar ahora en "lista", es la posición en la que se cambia de signo (de negativo a positivo), es decir:
la posicion "n" tal que:
Conjunto(n) <= 0 <= Conjunto(n+1)

Lo he planteado de la siguiente forma:

int posicion = 0; //por defecto, caso base

int inicio = 0;

int fin = lista.size()-1;

int mitad;

while(fin-inicio > 0);
{

mitad = (inicio+fin)/2 + 1;
float valor_mitad = (Float)lista.get(mitad);
if(valor_mitad == 0)
{
posicion = mitad;
break;
}

float valor_anterior = (Float)lista.get(mitad-1);

if (valor_mitad>0)
{
if (valor_anterior <= 0)
{
posicion = mitad-1;
break;
}

fin = mitad-1;

}

float valor_siguiente = (Float)lista.get(mitad+1);

if (valor_mitad<0)
{
if (valor_siguiente >= 0)
{
posicion = mitad;
break= 1;

}

inicio = mitad+1;

}


}



Sólo me aparece error de compilación en los break.