Prima reinserisco il codice opportunamente formattato e poi ti rispondo
Codice:
#include <iostream>
#include <stdlib.h>
#define NMAX 100
using namespace std;
void ordinamento(int v[], int n);
int main()
{
int i, j, k, l, vet1[NMAX], vet2[NMAX], vet3[NMAX], m, n;
cout << "Inseirsci la grandezza del primo vettore: ";
cin >> n;
cout << "Inseirsci la grandezza del secondo vettore: ";
cin >> m;
for (i = 0; i < n; i++){
cout << "Inserisci il " << i + 1 << " numero del primo vettore: ";
cin >> vet1[i];
}
for (j = 0; j<m; j++){
cout << "Inserisci il " << j + 1 << " numero del secondo vettore: ";
cin >> vet2[j];
}
ordinamento(vet1, n);
ordinamento(vet2, m);
system("PAUSE");
i = 0;
j = 0;
k = 0;
do{
if (vet1[i]>vet2[j]){
vet3[k] = vet2[j];
j++;
}
else{
if (vet1[i] == vet2[j]){
vet3[k] = vet1[i];
j = j + 1;
i = i + 1;
}
else{
vet3[k] = vet2[i];
i++;
}
}
k++;
} while (i < n && i < m);
if (i == n){
for (l = j; l < m; l++){
vet3[k] = vet2[l];
k++;
}
}
else{
for (l = i; l < i; l++){
vet3[k] = vet1[l];
k++;
}
}
for (k = 0; k < (n + m); k++){
cout << "il " << i + 1 << " numero del 3 vettore: ";
cout << vet3[k];
cout << endl;
}
return 0;
}
void ordinamento(int v[], int n) {
int i, k;
int temp;
for (i = 0; i < n - 1; i++) {
for (k = 0; k<n - 1 - i; k++) {
if (v[k] > v[k + 1]) {
temp = v[k];
v[k] = v[k + 1];
v[k + 1] = temp;
}
}
}
}
C'è un errore nella riga
Codice:
vet3[k] = vet2[i];
che invece deve essere
Codice:
vet3[k] = vet1[i];
e nella condizione del while che deve essere
Errori che potrebbero essere dovuti alla disattenzione.
Detto questo, alla fine del merge rimangono pendenti gli ultimi elementi dai rispettivi vettori di provenienza da copiare nel vettore di merge e quello lo fai banalmente con due cicli while.
Rivedi meglio tutto il seguente blocco e ragionaci.
Se ti do la soluzione pronta non impari nulla.
Codice:
if (i == n){
for (l = j; l < m; l++){
vet3[k] = vet2[l];
k++;
}
}
else{
for (l = i; l < i; l++){
vet3[k] = vet1[l];
k++;
}
}
for (k = 0; k < (n + m); k++){
cout << "il " << i + 1 << " numero del 3 vettore: ";
cout << vet3[k];
cout << endl;
}
L'ouput corretto è il seguente.
Codice:
c:\hwu>merge
Inseirsci la grandezza del primo vettore: 4
Inseirsci la grandezza del secondo vettore: 4
===== PRIMO VETTORE =====
Inserisci il 1 numero del primo vettore: 7
Inserisci il 2 numero del primo vettore: 4
Inserisci il 3 numero del primo vettore: 2
Inserisci il 4 numero del primo vettore: 5
===== SECONDO VETTORE =====
Inserisci il 1 numero del secondo vettore: 2
Inserisci il 2 numero del secondo vettore: 3
Inserisci il 3 numero del secondo vettore: 1
Inserisci il 4 numero del secondo vettore: 6
Premere un tasto per continuare . . .
===== VETTORE FUSO=====
1
2
3
4
5
6
7