Ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void ricorsione_div(int *, int, int, int , int);
void ricorsione(int *, int , int m, int, int);
long conta=0;
int main(int argc, char *argv[])
{
int i,j,dim, *vet;
float t0,t1;
if(argc<2)
{
printf("Errore numero argomenti: %s N\n\n",argv[0]);
exit(EXIT_FAILURE) ;
}
dim=atoi(argv[1]);
vet=malloc((dim+1)*sizeof(int));
for(i=0; i<dim; i++)
{
vet[i]=rand()%100;
printf("elemento %d: %d\n",i+1,vet[i]);
// scanf("%d", &vet[i]);
}
printf("\n");
t0 = ((float)clock())/CLOCKS_PER_SEC;
ricorsione_div(vet,0,dim,i, dim);
t1 = ((float)clock())/CLOCKS_PER_SEC;
printf("\ncoppie trovate e': %lu\n", conta);
printf("\nTempo di esecuzione in secondi: %f\n", t1-t0);
return 0;
}
void ricorsione_div(int *vet,int l,int r, int i, int dim)
{
int m;
m=(l+r)/2;
if(r<=l)
{
return;
}
ricorsione_div(vet,l,m,i ,dim);
ricorsione_div(vet,m+1,r, i, dim);
ricorsione(vet,l,m,r, dim);
return;
}
void ricorsione(int* A ,int l, int m, int r, int dim)
{
int i, j, k;
i = m;
for (k = i; k < dim; k++)
{
if ( A[i]> A[k] && i<k)
conta++;
}
}
return;
}