Esempio n. 1
0
void tri_fusion(int* result, int it, int* arr,  int size){
#ifdef DEBUG
	printf("tri_fusion(int*, %d, int*, %d)\n", it, size);
#endif

	if(size == 1){
		result[it] = arr[it];
		return;
	}


	int size1 = size/2;
	int size2;

	if(size % 2 == 0){
		size2 = size1;
	}else{
		size2 = size1 + 1;
	}

	int it1 = it;
	int end1 = it1 + size1;
	int it2 = end1;
	int end2 = it2 + size2;

	tri_fusion(result, it1, arr, size1);
	tri_fusion(result, it2, arr, size2);

	for(int i = 0; i < size; ++i)
		arr[i + it] = result[i + it];

	fusion(result, it, arr, it1, end1, it2, end2);
}
Esempio n. 2
0
void tri_fusion(int *t, int deb, int fin)
{
    if(deb < fin) {
        int milieu = (deb + fin)/2;
        tri_fusion(t,deb,milieu);
        tri_fusion(t,milieu+1,fin);
        interclasser(t,deb,milieu,fin);
    }
}
unsigned int tri_fusion(int *tab, int l, int r) {
  unsigned int cpt = 0;
  if (l < r) {
    int m = l+(r-l)/2;
    cpt = tri_fusion(tab, l, m);
    cpt += tri_fusion(tab, m+1, r);
    cpt += fusion(tab, l, m, r);
  }
  return cpt;
}
 void tri_fusion(objet *t,int d,int f)
 {
  	int m;
 if(d<f)
 {
 	 m=(d+f)/2;
 	  tri_fusion(t,d,m);
 	  tri_fusion(t,m+1,f);
 	  fusion(t,d,m,f);

 }
  }
Esempio n. 5
0
int main() {
    int t[N] = {10,2,4,5,6,3,1,9,7,8};
    //tri_bulle(t);
    //tri_insertion(t);
    //tri_selection(t);
    tri_fusion(t,0,N);
    affiche(t);
    tri_rapide(t,0,N-1);
    affiche(t);
    return 0;
}
unsigned int calcul_inversions_2(int *tab, unsigned int longueur) {
  unsigned int cpt = 0;
  int *tab_tmp = malloc(longueur * sizeof(int));
  int i;

  /* On travaille avec un tableau temporaire pour ne pas trier le tableau initial */
  for(i = 0 ; i < longueur ; i++)
    tab_tmp[i] = tab[i];
  
  if (longueur > 0)
    cpt = tri_fusion(tab_tmp, 0, longueur - 1);
  
  free(tab_tmp);

  return cpt;
}
Esempio n. 7
0
int main(int argc, char** argv){
	int size = 10;
	
	if(argc >= 2)
		size = atoi(argv[1]);

	int* arr = malloc(sizeof(int) * size);
	int* result = malloc(sizeof(int) * size);

	for(int i = 0; i < size; ++i){
		scanf("%d", arr + i);
	}

	tri_fusion(result, 0, arr, size);

#ifdef DEBUG
	for(int i = 0; i < size; ++i)
		printf("%d ", result[i]);
#endif
}