Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ordenar vectores

Estas en el tema de ordenar vectores en el foro de C/C++ en Foros del Web. Buenos dias Resulta que tengo un ejersicio de ordenar un vector en el cuál el valor menor quede een la primera posición y el que ...
  #1 (permalink)  
Antiguo 10/03/2016, 08:02
 
Fecha de Ingreso: marzo-2016
Mensajes: 1
Antigüedad: 8 años, 9 meses
Puntos: 0
Pregunta ordenar vectores

Buenos dias
Resulta que tengo un ejersicio de ordenar un vector en el cuál el valor menor quede een la primera posición y el que estaba en la primera posición moverlo a la posición donde estaba el menor, es decir intercambiarlos. He logrado poner el menor en la posición menor, pero no logro mover el que allí estaba a la posición donde estaba el menor. El código es:
Código:
#include <iostream>
using namespace std;
int main(void)
{

float arbol[999];
int k,posicion_men;
float policia,menor;

cin >> arbol[1] >> arbol[2] >>arbol[3] >>arbol[4] >>arbol[5] >>arbol[6] >>arbol[7] >>arbol[8] >>arbol[9] >>arbol[10];
cin >> k;
cout << arbol[1] << "   " << arbol[2] <<"   " <<arbol[3] <<"   " <<arbol[4] <<"   " <<arbol[5] <<"   " <<arbol[6] <<"   " <<arbol[7] <<"   " <<arbol[8] <<"   " <<arbol[9] <<"   " <<arbol[10]<< endl;
	
	menor=arbol[k];
	posicion_men=k;
	for(int i=k;i<=10;i=i+1)
	{
		if(arbol[i]<=menor)
			{
				menor=arbol[i];
				posicion_men=i;
				
			}
	}
	policia=arbol[k];
	arbol[k]=menor;
	menor=policia;
	


cout << arbol[1] << "   " << arbol[2] <<"   " <<arbol[3] <<"   " <<arbol[4] <<"   " <<arbol[5] <<"   " <<arbol[6] <<"   " <<arbol[7] <<"   " <<arbol[8] <<"   " <<arbol[9] <<"   " <<arbol[10] ;

return 0;
}
Gracias por su colaboración.
  #2 (permalink)  
Antiguo 10/03/2016, 08:46
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: ordenar vectores

Si estás usando 10 elementos lo suyo sería tener:
Código C++:
Ver original
  1. float arbol[10];
en vez de:
Código C++:
Ver original
  1. float arbol[999];
Además, en C++ existe una cosa llamada bucles que son muy útiles. Te permiten, por ejemplo, evitar repetir código de forma absurda.

Esto:
Código C++:
Ver original
  1. cin >> arbol[1] >> arbol[2] >>arbol[3] >>arbol[4] >>arbol[5] >>arbol[6] >>arbol[7] >>arbol[8] >>arbol[9] >>arbol[10];
Es equivalente a:
Código C++:
Ver original
  1. for(int i=0;i<10;i++)
  2.   cin >> arbol[i];
Existen otras formas mejores de hacerlo, pero saber que los bucles los puedes usar también para esto es un comienzo. Por cierto, el primer elemento del array es arbol[0], no arbol[1].

Lo comentado te sirve también para imprimir los valores.

Por otro lado, intercambiar dos valores es tan sencillo o complicado como ejecutar una de estas dos opciones:
Código C++:
Ver original
  1. float temp = arbol[i];
  2. arbol[i] = arbol[j];
  3. arbol[j] = temp;
o
Código C++:
Ver original
  1. std::swap(arbol[i],arbol[j]);
Tu estás actualmente haciendo:
Código C++:
Ver original
  1. policia=arbol[k];
  2. arbol[k]=menor;
  3. menor=policia;
Es decir, arbol[k] acaba en menor en vez de acabar en arbol[loquesea]

Por cierto, Para qué usas 'k' exactamente? ¿Por qué es un dato que le pides al usuario?
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: arreglo, vector
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 17:01.