Ordenamiento de numeros problema con la salida

Iniciado por nolasco281, 23 Abril 2014, 00:08 AM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola como estan.

Tengo la siquiente duda este es mi algoritmo

El problema que tengo es que la salida no me sale correctamente alguien sabe a que se deba esto.
No se por que a mi me sale 0.

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

main()
{
int a[] = {35, 82, 30, 28, 19};
int temp;

       //numero de iteraciones = n-v
//Numero de veces que se repetira para ordenar = v
//Numero de datos = n = 5
for(int v = 0; v <= 5-1; v++)
{
cout << endl;
for(int i = 0; i <= 5-v; i++)
{
if(a[i] < a[i-1])   //Evaluacion si el numero a su Izq es menor
{
temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
}

for (int i = 0; i<5 ; i++) //Salida
  cout<< a[i] <<" ";
}
return 0;
}


Pero mi salida con 5-v


salida con otra Pc con 5-v


mi salida con 4-v es como la salida de otra pc o como la segunda imagen

saludos muchas gracias.
Lo que se puede imaginar... se puede programar.

Blaster

Cita de: nolasco281 en 23 Abril 2014, 00:08 AM
El problema que tengo es que la salida no me sale correctamente alguien sabe a que se deba esto. No se por que a mi me sale 0.

Se debe a la condición de if de esa forma tu estas comparando el array con posiciones no existentes deberia quedar asi

Código (cpp) [Seleccionar]
for(int v = 0; v <= 5-1; v++){
   cout << endl;
   for (int i = 0; i <= 5-v; i++){
       if( a[i] > a[i+1] ) {  //Evaluacion si el numero a su Izq es menor
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}


Saludos..

nolasco281

#2
Hola

veo que solo cambiaste le < por > lo que eso hace es ordenarlos de mayor a menor

5 es el numero de datos el en arreglo y cuando v,  5 - 0 = 5 asi que en ningun momento se pasa las posiciones del arreglo.

Nota: tomando a V=0

Gracias por contestar.
Lo que se puede imaginar... se puede programar.

Blaster

Cita de: nolasco281 en 23 Abril 2014, 01:21 AM
veo que solo cambiaste le < por > lo que eso hace es ordenarlos de mayor a menor

Compila y ejecuta los ordena de menor a mayor
Cita de: nolasco281 en 23 Abril 2014, 01:21 AM
veo que solo cambiaste le < por > lo que eso hace es ordenarlos de mayor a menor

En la primera iteración del segundo for el valor de i es cero en el if teniendo encuenta esto tu estas comparando el primer indice del array con la posición -1 que no existe.

Saludos..


nolasco281

Hola no se si estoy confundido

Cita de: Blaster en 23 Abril 2014, 01:58 AM
Compila y ejecuta los ordena de menor a mayor
y no se si ves las imagenes

pero las misma instruccion en diferente pc cambia.

segun yo nunca llega a -1.

ya que si tengo

n   v  k
5 - 0  5
5 - 1  4
5 - 2  3
5 - 3  2 
5 - 4  1

Jamas llega a -1 en las iteraciones ya sea a la catidad de operaciones que debe de hacer, o en manejo datos del arreglo que se esta haciendo.

Es lo mismo como si cambiaras 5-v por 5-v-1 la ejecucion te daria un resultado correcto. pero ese no es el tema

Gracias por responder.
Lo que se puede imaginar... se puede programar.

rir3760

Cita de: nolasco281 en 23 Abril 2014, 02:36 AMsegun yo nunca llega a -1.
En la primera iteración del bucle interno el valor del contador "i" es cero y en el condicional ocurre el problema que menciona Blaster:
Código (cpp) [Seleccionar]
for (int i = 0; i <= 5-v; i++){
   // Primera iteracion, i == 0
   if (a[i] < a[i-1]) // i, i - 1 ==> 0, 0 - 1


Otro error se encuentra en la primera iteración del bucle externo: con la variable "v" igual a cero el bucle interno iterara con su contador "i" tomando los valores 0 .. 5 (seis iteraciones).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

nolasco281

hola

ya entendi.

solo cambien la inicializacion de la variables
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

main()
{
int a[] = {35, 82, 30, 28, 19};
int temp;

//Numero de veces que se repetira para ordenar = v
//Numero de datos = n = 5
for(int v = 1; v <= 5-1; v++)
{
cout << endl;
for(int i = 1; i <= 5-v; i++)
{
if(a[i] < a[i-1])   //Evaluacion si el numero a su Izq es menor
{
temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
}

for (int i = 0; i<5 ; i++) //Salida
  cout<< a[i] <<" ";
}
return 0;
}




ya que la salida con el for de Blaster en el segundo comentario era esta por eso creo que me confundi.



saludos y muchas gracias.

PD: gracias por apuntar donde estaba el error

Código (cpp) [Seleccionar]
    for (int i = 0; i <= 5-v; i++){
      // Primera iteracion, i == 0
      if (a[i] < a[i-1]) // i, i - 1 ==> 0, 0 - 1
Lo que se puede imaginar... se puede programar.