Necesito ayuda con un metodo de ordenamiento

toñonv

Bovino maduro
#1
Este metodo como otros varios nos dejaron de tarea investigarlos, ya tengo un buen de codigo, solo que me fastidia un error, si alguien pudiera ayudarme seria de gran ayuda para mi.

El metodo es el de Burbuja Mejorada y el error lo resalto en rojo, y me dice asi: Indice fuera de limites de la matriz.

de antemano GRACIAS por su tiempo.

CODIGO.

static UInt16 n;
static int[] numeros;

static void captura()
{
bool result = false;
while (result == false)
{
Console.Write("Cuantos números desea capturar: ");
result=UInt16.TryParse(Console.ReadLine(),out n);
}
numeros = new int[n];
Console.WriteLine("\nIntroduzca los números a ordenar: ");
int cont = 0;
while (cont < n)
{
Console.Write("{0}: ", cont + 1);
result = int.TryParse(Console.ReadLine(), out numeros[cont]);
if (result == true)
cont++;
else
Console.WriteLine("NO es un número entero.");
}
Console.WriteLine("Ha terminado de capturar los números.");
Console.ReadKey(true);
}

static void burbuja_mejorada()
{
int aux, i, j, cambio;
for (i = 0; i < (n - 1); i++)
{
cambio = 0;
for (j = 0; j <(n-i); j++)
{
if (numeros[j] > numeros[j + 1])
{
aux = numeros[j];
numeros[j] = numeros[j + 1];
numeros[j + 1] = aux;
cambio = 1;
}
}
if (cambio == 0)
break;
}
}

static void desplegar()
{
for (int cont = 0; cont < n; cont++)
Console.WriteLine("{0}: {1}", cont + 1, numeros[cont]);
Console.ReadKey(true);
}
 

dragon_eryk

Bovino Milenario
#4
lo que pasa es que no puedes poner una operacion aritmetica como es j-n-i en un espacio del for que esta asignado para condiciones o condicionales como le quieras decir.

Para mi que la sintaxis es como la del for anterior

for (i = 0; i < (n - 1); i++)

solo que en vez de ser "i" y restarle 1 a n ahora es "j" y se le resta "i" que quedaria asi

for (j = 0; j < (n - i); j++)
 

toñonv

Bovino maduro
#5
lo que pasa es que no puedes poner una operacion aritmetica como es j-n-i en un espacio del for que esta asignado para condiciones o condicionales como le quieras decir.

Para mi que la sintaxis es como la del for anterior

for (i = 0; i < (n - 1); i++)

solo que en vez de ser "i" y restarle 1 a n ahora es "j" y se le resta "i" que quedaria asi

for (j = 0; j < (n - i); j++)
Si tienes razon ya lo probe, solo que ahora me saca otro problema. Muchas Gracias Amigo. Edito el tema.
 

dragon_eryk

Bovino Milenario
#6
bro checa que estos unos
if (numeros[j] > numeros[j + 1])
{
aux = numeros[j];
numeros[j] = numeros[j + 1];
numeros[j + 1] = aux;
cambio = 1;
}

en realidad sean 1 y no "i"
 

toñonv

Bovino maduro
#7
bro checa que estos unos
if (numeros[j] > numeros[j + 1])
{
aux = numeros[j];
numeros[j] = numeros[j + 1];
numeros[j + 1] = aux;
cambio = 1;
}

en realidad sean 1 y no "i"
muchas gracias hermano !!!

de seguro eso es... ya estoy algo cansado y no veo algunas cosas
lo checo y regreso
 
Arriba