qualcuno sa dirmi xk non mi ordina niente???
l'errore è sicuramente nella parte in grassetto (inserita xkè il prof vuole che si traduca fedelmente il prog dal Pascal in C).
codice:
#include <stdlib.h>
#include <stdio.h>
#define MAX 300
/*
* Funzione Merge per la fusione di due
* componenti ordinate dell'array.
*/
void Merge(int A[], int primo, int mezzo, int ultimo) {
int i, j, k, h, B[MAX];
i = primo;
j = mezzo+1;
k = 0;
while (i <= mezzo && j <= ultimo) {
if (A[i] < A[j]) {
B[k] = A[i];
i++;
} else {
B[k] = A[j];
j++;
}
k++;
}
if (i <= mezzo) {
j = ultimo - k;
for (h=j; h>=0; h--)
A[k+h] = A[i+h];
for (j=primo; j<k-1; j++)
A[j] = B[j];
return;
}
}
/*
* Funzione ricorsiva MergeSort.
*/
void MergeSort(int A[], int primo, int ultimo) {
int q;
if (primo < ultimo) {
q = (primo+ultimo)/2;
MergeSort(A, primo, q);
MergeSort(A, q+1, ultimo);
Merge(A, primo, ultimo, q);
}
return;
}
/*
* Funzione principale
*/
int main()
{
int *vet, n, i;
printf("Quanti elementi vuoi inserire nell'array?: ");
scanf("%d", &n);
printf("\n");
vet = (int *) malloc (n*sizeof(int));
for(i = 0; i < n; i++)
{
printf("Inserisci il %d elemento dell'array: ", i+1);
scanf("%d", &vet[i]);
}
printf("\nGli elementi inseriti nell'array sono: ");
for(i = 0; i < n; i++)
printf("%d ", vet[i]);
printf("\n");
MergeSort(vet, 0, n-1);
printf("\nL'array ordinato e' il seguente: ");
for(i = 0; i < n; i++)
printf("%d ", vet[i]);
printf("\n\n");
system("pause");
return 0;
}
se al posto di quel codice inserisco il seguente, il prog funziona, ma vorrei capire qual è l'errore che faccio nel precedente.
codice:
while (i <= mezzo) {
B[k] = A[i];
i++;
k++;
}
} else {
while (j <= ultimo) {
B[k] = A[j];
j++;
k++;
}
}
for (k = primo; k <= ultimo; k++)
A[k] = B[k - primo];
grazie.