void MergeVettore(TipoVettore A, int iniziale, int mediano, int finale)
{
TipoVettore B;
int primo, secondo, appoggio, da_copiare;
primo = iniziale;
secondo = mediano + 1;
appoggio = iniziale;
while (primo <= mediano && secondo <= finale) {
if (A[primo] <= A[secondo]) {
B[appoggio] = A[primo];
primo++;
}
else {
B[appoggio] = A[secondo];
secondo++;
}
appoggio++;
}
if (secondo > finale)
for (da_copiare = primo; da_copiare <= mediano; da_copiare++) {
B[appoggio] = A[da_copiare];
appoggio++;
}
else
for (da_copiare = secondo; da_copiare <= finale; da_copiare++) {
B[appoggio] = A[da_copiare];
appoggio++;
}
for (da_copiare = iniziale; da_copiare <= finale; da_copiare++)
A[da_copiare] = B[da_copiare];
}
void MergeRicorsivo(TipoVettore A, int iniziale, int finale)
{
int mediano;
if (iniziale < finale) {
mediano = (iniziale + finale) / 2;
MergeRicorsivo(A, iniziale, mediano);
MergeRicorsivo(A, mediano+1, finale);
MergeVettore(A, iniziale, mediano, finale);
}
}
void MergeSort(TipoVettore A, int n)
{
MergeRicorsivo(A, 0, n-1);
}