Olá amigos, boa tarde!
Abaixo descrevo o código que tenho que faz a ordenação de um vetor pelo método de MergeSort. Meu problema é que preciso retornar no main o número de inversões do processo. Na verdade eu não sei como identificar as inversões e também tenho problemas com recursividade. Segue o código abaixo e desde já fico agradecido. Qualquer informação será bem vinda!
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void Intercala (int p; int q; int r; int v[]) {
int i, j, k, *w;
w = malloc ((r-p) * sizeof (int));
i = p; j = q; k = 0;
while (i < q && j < r) {
if (v[i] <= v[j]) w[k++] = v[i++];
else w[k++] = v[j++];
}
while (i < q) w[k++] = v[i++];
while (j < r) w[k++] = v[j++];
for (i = p; i < r; i++) v[i] = w[i-p];
free (w);
}
void Mergesort (int p; int r; inr v[]) {
if (p < r-1) {
int q = (p + r)/2;
Mergesort (p, q, v);
Mergesort (q, r, v);
Intercala (p, q, r, v);
}
}
int main() {
int t, i, n, j;
scanf("%d", &t);
for (i=0; i<t; i++) {
scanf("%d", &n);
int a[n], inversoes = 0;
for (j=0; j<n; j++) {
scanf("%d", &a[j]);
}
printf("\n");
Mergesort (0, n, a);
printf("%d\n", inversoes);
}
return 0;
}