Salve, ragazzi, avrei un problemino con un algoritmo...ho due vettori v1 e v2...v1 è composto da elementi inseriti in ordine crescente mentre v2 sono inseriti casualmente...io devo fare un programma che inserisca gli elementi di v2 in v1 nel posto giusto in modo tale che gli elementi continuano ad essere in ordine crescente...ho fatto un algoritmo ma mi va in crash il programma e non capisco quale sia il motivo, potete aiutarmi a capire dov'è l'errore? vi posto il codice con la traccia anche:

codice:
/*Prova 4
Siano assegnati in ingresso, da tastiera, due vettori di interi V1 ed V2, 
ed i loro riempimenti n1 ed n2. Si supponga che gli elementi del vettore V1 
siano ordinati in senso crescente. Si scriva un programma che inserisca in 
ordine nel vettore V1 tutti gli elementi del vettore V2. Si stampi quindi il 
vettore V1 modificato. Il programma deve essere articolato in funzioni 
(ad es.: input, output, inserisci). Suggerimento: la funzione inserisci riceve 
in ingresso n1, V1, n2 e V2 e modifica il vettore V1 ed il suo riempimento.
Esempio
INPUT:	n1 =  7		V1 =  1 4 7 9 12 15 22 	n2 =  4		V2 =  14 3 5 25
OUTPUT:	V1 = 1 3 4 5 7 9 12 14 15 22 25

*/

#include <cstdlib>
#include <iostream>

using namespace std;
/*PROTOTIPI FUNZIONI*/
void input (int vett1[], int vett2[], int &riemp1, int &riemp2);    //funz. input
void insert (int vett1[], int vett2[], int &riemp1, int riemp2);      //funz. inserimetno


int main()
{ int v1[100],v2[100];
  int n1,n2;
    
  input (v1,v2,n1,n2);    //chiamata a funzione
  insert(v1,v2,n1,n2);    //chiamata a funzione inserimento
      
    system("PAUSE");
    return 0;
}

/*DEFINIZIONI FUNZIONI*/

//funz. input
void input (int vett1[], int vett2[], int &riemp1, int &riemp2)
{ int i; //variabile scorrimento vettore
  /*Istruzioni di richiesta input valori, prima si assegnano i riempimenti dei
  due vettori e in seguito si richiede di inserire i singoli componenti dei due
  vettori, con esplicita richiesta che gli elementi di V1 devono essere inseriti 
  ordine crescente.*/

  cout<<"Si assegnino due interi ai riempimenti N1 ed N2: \n";
  cin>>riemp1>>riemp2;
  
  cout<<"Si assegnino "<<riemp1<<" elementi interi in ordine crescente a V1: \n";
  for(i=0;i<riemp1;i++)
  cin>>vett1[i];
  
  cout<<"\n";
  cout<<"Si assegnino "<<riemp2<<" elementi interi a V2: \n";
  for(i=0;i<riemp2;i++)
  cin>>vett2[i];
  
  cout<<"\n";
}  //end funzione input 

//funzione di inserimento
void insert (int vett1[], int vett2[], int &riemp1, int riemp2)
{int i,j,k; //variabili di scorrimento nei cicli for

  /*Spiegazione algoritmo: con il primo ciclo si analizzano tutti gli elementi 
  di v2. Ad ogni elemento [i] poi si apre un altro ciclo for che controlla tutti
  gli elementi [j] di v1 finchè non trova l'elemento >= dell'elemento [i]analizzato
   di v2. A questo punto allora si incrementa di 1 il riempimento di v1 e si apre un 
  ulteriore ciclo for che sposta a partire dall'ultimo elemento [k] tutti gli elementi
  di v1 di un posto in avanti fino ad arrivare all'elemento [j] analizzato, si esce 
  dal ciclo e nella posizione di quest'ultimo elemento [j] si inserisce 
  l'elemento di v2 di posto [i] analizzato.*/
  
 for(i=0;i<riemp2;i++)
 { for(j=0;j<riemp1;j++)
    { if (vett1[j]>= vett2[i])
        { riemp1++;
          for(k=riemp1;k>=j;k--)
          {vett1[k]=vett1[k-1];}
          vett1[j]=vett2[i];
        } 
    }     
  }   
  
  //cout di prova
  cout<<"nuovo riemp"<<riemp1;
  cout<<"nuovi elementi \n";
  for(i=0;i<riemp1;i++)
  cout<<vett1[i]<<"\t";     
}