Hola, mirar estoy intentando hacer el ejercicio siguiente:
Hacer un procedimiento
void insereix(vector <double>& v);
que, suponiendo que todas las posiciones de v, excepto quizas la ultima,estan ordenadas de pequeño a grande, deje v totalmente ordenado de pequeño a grande.
Un ejemplo seria, si v fuera (2,4,7,7,8,9,5), deberia quedar(2,4,5,7,7,8,9).
El codigo que yo he hecho es el siguiente:
#include <iostream>
#include <vector>
using namespace std;
void insereix(vector <double>& v){
int n = v.size();
int k = v[n-1];
vector <double> vi(n);
bool inserit = false;
int j;
for(int i = 0; i < n and not(inserit); ++i){
if(v[i] <= k){
vi[i] = v[i];
} else {
vi[i] = k;
inserit = true;
j = i + 1;
}
}
for(int i = j; i < n;++i){
vi[i] = v[i];
}
}
int main(){
int n;
cin >> n;
vector <double> v1(n);
for(int i = 0; i < n; ++i)
cin >> v1[i];
insereix(v1);
for(int i = 0; i < n; ++i)
cout << v1[i];
}
Pero cuando imprimo me sale el vector exactamente igual que lo he introducido.
Para explicar un poco el código de la función, lo que hago es crear un nuevo vector donde guardare el antiguo vector ordenado.
Declaro una variable(k) donde guardo el valor de la ultima posición, y con un for voy comprobando si cada posición es menor o igual a la ultima. Si no es así, introduzco en esa posición el valor de k, y con una variable booleana puesta en false, hago que no se ejecute el código.
Luego solo hago otro for para rellenar el vector desde la siguiente posición de k.
No entiendo porque no funciona.
Muchas gracias y adiós!.