BigMarioss
Utente Attivo
- Messaggi
- 360
- Reazioni
- 10
- Punteggio
- 38
Buongiorno ragazzi mi serve una mano... Dove sbaglio? I commenti che ci ho messo sono corretti? Forse non ho capito qualcosa...
PS: questo è merge sort??
PS: questo è merge sort??
C++:
/* Ordinamento per fusione.
Scrivere un programma che ordina in senso non decrescente due
sequenze di numeri positivi memorizzate su due array A e B, ciascuno dei quali ordinato (in senso
non decrescente), riempiendo un terzo array C che conterrà la sequenza totalmente ordinata.
-definire una dimensione massima dei vettori A e B;
-inserire le due sequenze da tastiera;
-stampare la sequenza totalmente ordinata in C.
*/
#include<stdio.h>
#include<stdlib.h>
#define NUM 20
int main(){
int A[NUM], B[NUM], C[NUM];
int i=0, j=0, k=0, na, nb, nc; // i, j, k sono variabili che servono rispettivamente per ciascun array, per non confonderli nei vari cicli
int count=0;
printf("\nInserisci la dimensione della prima sequenza: ");
scanf("%d", &na);
printf("\nInserisci la dimensione della seconda sequenza: ");
scanf("%d", &nb);
nc = na + nb;
printf("\nPrima sequenza:\n\n");
for (i=0; i < na; i++){
printf("Dato %d: ", i+1);
scanf("%d", &A[i]);
}
printf("\nSeconda sequenza:\n\n");
for (i=0; i < nb; i++){
printf("Dato %d: ", i+1);
scanf("%d", &B[i]);
}
printf("\n");
/*ordina: scandisci sia A sia B e confronta
i due elementi considerati ad ogni passo*/
while(i<na && j<nb){ // while serve per terminare l'inserimento dei numeri nel vettore C
if(A[i] <= B[j]){ // confronta i numeri di A con quelli di B e memorizza in C i numeri adeguati alle rispettive condizioni
C[k] = A[i];
i++;
}
else{
C[k] = B[j];
j++;
}
k++; // incrementa SEMPRE l'indice di C per memorizzare di volta in volta nuovi dati
}
if(i >= na){ // memorizza gli eventuali restanti numeri di B in C
int h;
for(h=j; h < nb; h++){
C[k] = B[h];
k++;
}
}
else if(j >= nb){ // memorizza gli eventuali restanti numeri di A in C
int h;
for(h=i; h < na; h++){
C[k]=A[h];
k++;
}
}
printf("Elementi di C:\n"); // stampa i numeri di C
for(k=0; k < nc; k++){
printf("%d,\t", C[k]);
}
}