Code :
int tri_fusion_bis(long tab[], int N,int debut){ //deuxieme fonction pour pas avoir une signature moche avec le debut du tableau if(N==1){return 0;} //cas d'arret int size1,size2; //taille des deux tableau qui seront traité recursivement size1=(N/2); size2=N-size1; // pour prendre en charge les tableau impaire tri_fusion_bis(tab,size1,debut);//les deux appele recursif tri_fusion_bis(tab,size2,debut+size1); allocation_tableau(tmp,long, N ); // tableau temporaire resultat int indice1=debut, indice2=debut+size1; //les deux indice pour savoir on t'en est dans l'avancement de tes deux tableau int i; for (i=debut;i<=debut+N;i++){ if((indice1<debut+size1)&&(tab[indice1]<tab[indice2])){ indice1++; tmp[N+i+1]=tab[indice1];} else{ if (indice2<debut+size2){ indice2++; tmp[N+i+1]=tab[indice1];} else{ indice1++; tmp[N+i+1]=tab[indice1];} } //deux indice pour savoir ou on est apres on compare qui est le plus petit, et attention si on est a la fin de pas faire de comparaison en sortant du tableau donc on met celui de l'autre tableau : c'est la raison pour laquel je verifie indice1<debut+size1 et aussi indice2<debut+size2 } for(i=0;i<N;i++){ tab[i]=tmp[i];} return 0; }
|