void tri_rapide(int *t, int deb, int fin) { if (deb < fin) { int milieu = partition(t,deb,fin); tri_rapide(t,deb,milieu); tri_rapide(t,milieu+1,fin); } }
structSondes tri_rapide(int *t, int gauche, int droite) { structSondes sonde = { 0, 0, 0 }; sonde.nb_comparaisons++; if (gauche < droite) { int pivot = partitionner(t, gauche, droite, &sonde); tri_rapide(t, gauche, pivot - 1); tri_rapide(t, pivot + 1, droite); } return sonde; }
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; }
int test_GRAPHPC(int nb_individus,int nb_dimensions,groupe_t *groupe_pere,groupe_t *groupe1, groupe_t *groupe2) { /*declaration de variables*/ int i,j,compteur,on_divise; double *probabilites_transition_1vers2,*probabilites_transition_2vers1; double somme,moyenne_changement_classe1,moyenne_changement_classe2,pourcentage; double probabilite_attendue_changement_classe1,probabilite_attendue_changement_classe2; /*fin declaration de variables*/ pourcentage=0.5; /*allocation memoire*/ probabilites_transition_1vers2=(double *)malloc(sizeof(double)*groupe1->nb_individus); probabilites_transition_2vers1=(double *)malloc(sizeof(double)*groupe2->nb_individus); /*fin allocation memoire*/ compteur=0; on_divise=NON; /*on commence par les transitions partant de sommets du groupe1*/ for(i=0;i<groupe1->nb_individus;i++) { somme=0; for(j=0;j<groupe1->nb_individus;j++) { if(j!=i) { somme+=groupe1->individus[i]->valeurs_traitees[groupe1->individus[j]->id]; } } probabilites_transition_1vers2[i]=0; for(j=0;j<groupe2->nb_individus;j++) { probabilites_transition_1vers2[i]+= groupe1->individus[i]->valeurs_traitees[groupe2->individus[j]->id]; somme+=groupe1->individus[i]->valeurs_traitees[groupe2->individus[j]->id]; } if(somme<ZERO_LIMIT) { on_divise=OUI; break; } probabilites_transition_1vers2[i]/=somme; } if(on_divise==NON) { /*on continue par les transitions partant de sommets du groupe2*/ for(i=0;i<groupe2->nb_individus;i++) { somme=0; for(j=0;j<groupe2->nb_individus;j++) { if(j!=i) { somme+=groupe2->individus[i]->valeurs_traitees[groupe2->individus[j]->id]; } } probabilites_transition_2vers1[i]=0; for(j=0;j<groupe1->nb_individus;j++) { probabilites_transition_2vers1[i]+= groupe2->individus[i]->valeurs_traitees[groupe1->individus[j]->id]; somme+=groupe2->individus[i]->valeurs_traitees[groupe1->individus[j]->id]; } if(somme<ZERO_LIMIT) { on_divise=OUI; break; } probabilites_transition_2vers1[i]/=somme; } } if(on_divise==NON) { /*on trie les probabilites de changement de groupe par ordre decroissant*/ tri_rapide(probabilites_transition_1vers2,0,groupe1->nb_individus-1); moyenne_changement_classe1=0; for(i=0;i<groupe1->nb_individus;i++) { printf("%.3f\n",probabilites_transition_1vers2[i]); moyenne_changement_classe1+=probabilites_transition_1vers2[i]; } moyenne_changement_classe1/=(double)groupe1->nb_individus; printf("\n**********************************\n"); tri_rapide(probabilites_transition_2vers1,0,groupe2->nb_individus-1); moyenne_changement_classe2=0; for(i=0;i<groupe2->nb_individus;i++) { printf("%.3f\n",probabilites_transition_2vers1[i]); moyenne_changement_classe2+=probabilites_transition_2vers1[i]; } moyenne_changement_classe2/=(double)groupe2->nb_individus; probabilite_attendue_changement_classe1= (double)groupe2->nb_individus/(double)(groupe_pere->nb_individus-1); probabilite_attendue_changement_classe2= (double)groupe1->nb_individus/(double)(groupe_pere->nb_individus-1); printf("moyenne1 : %f ; attendue : %f\n",moyenne_changement_classe1, probabilite_attendue_changement_classe1); printf("moyenne2 : %f ; attendue : %f\n",moyenne_changement_classe2, probabilite_attendue_changement_classe2); if((probabilite_attendue_changement_classe1-moyenne_changement_classe1>0.1)|| (probabilite_attendue_changement_classe2-moyenne_changement_classe2>0.1)) { on_divise=OUI; printf("ON DIVISE\n"); } else { on_divise=NON; printf("ON NE DIVISE PAS\n"); } } /*desallocation memoire*/ free(probabilites_transition_1vers2); free(probabilites_transition_2vers1); /*fin desallocation memoire*/ return on_divise; }
int main(int argn, char *argv[]) { int type_data; int type_tri; int sauvegarde_tableau_initial; int sauvegarde_tableau_final; int affichage_tableaux; int n = 0; char *fichier_lecture_tableau_initial, *fichier_sauvegarde_tableau_initial, *fichier_sauvegarde_tableau_final; int *tab; int i; structSondes sondes = {0, 0, 0}; if (argn == 1) { aide(argv[0]); exit(1); } type_data = UNKNOWN; type_tri = UNKNOWN; sauvegarde_tableau_initial = FALSE; sauvegarde_tableau_final = FALSE; affichage_tableaux = FALSE; for ( i = 1; i < argn; i+=2 ) { // choix des données à trier et des sauvegardes éventuelles du tableau initial et final if (strcmp("-f", argv[i]) == 0) { fichier_lecture_tableau_initial = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char)); strcpy(fichier_lecture_tableau_initial, argv[i+1]); type_data = FICHIER; continue; } if (strcmp("-si", argv[i]) == 0) { fichier_sauvegarde_tableau_initial = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char)); strcpy(fichier_sauvegarde_tableau_initial, argv[i+1]); sauvegarde_tableau_initial = TRUE; continue; } if (strcmp("-sf", argv[i]) == 0) { fichier_sauvegarde_tableau_final = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char)); strcpy(fichier_sauvegarde_tableau_final, argv[i+1]); sauvegarde_tableau_final = TRUE; continue; } if (strcmp("-a", argv[i]) == 0) { n = atoi(argv[i+1]); type_data = RANDOM; continue; } if (strcmp("-mc", argv[i]) == 0) { n = atoi(argv[i+1]); type_data = TRIE; continue; } if (strcmp("-pc", argv[i]) == 0) { n = atoi(argv[i+1]); type_data = TRIE_INVERSE; continue; } // choix de l'algorithme de tri if (strcmp("-t", argv[i]) == 0) { if (strcmp("bulle_naif", argv[i+1]) == 0) type_tri = BULLE_NAIF; else if (strcmp("bulle_bool", argv[i+1]) == 0) type_tri = BULLE_BOOL; else if (strcmp("bulle_opt", argv[i+1]) == 0) type_tri = BULLE_OPT; else if (strcmp("selection", argv[i+1]) == 0) type_tri = SELECTION; else if (strcmp("insertion", argv[i+1]) == 0) type_tri = INSERTION; else if (strcmp("rapide", argv[i+1]) == 0) type_tri = TRIRAPIDE; else { printf("\n le tri demandé < %s > n'existe pas \n", argv[i+1]); aide(argv[0]); exit(1); } continue; } // choix de la visualisation (affichage) du tableau initial et final if (strcmp("-v", argv[i]) == 0) { affichage_tableaux = TRUE; i--; continue; } printf("\n l'option demandée < %s > n'existe pas \n", argv[i]); aide(argv[0]); exit(1); } if (n < 1) { printf("\n le nombre d'éléments à trier est incorrect : %d \n", n); aide(argv[0]); exit(1); } switch(type_data) { case TRIE: { tab = data_triee(n); printf("Tableau initial trié (meilleur des cas)"); break; } case TRIE_INVERSE: { tab = data_triee_inverse(n); printf("Tableau intial trié en ordre inverse (pire des cas)"); break; } case FICHIER: { tab = f_lire_data(fichier_lecture_tableau_initial, &n); printf("Tableau initial lu dans %s", fichier_lecture_tableau_initial); break; } case RANDOM: { tab = random_data(n); printf("Tableau initial aléatoire"); break; } case UNKNOWN: aide(argv[0]); exit(1); } if (sauvegarde_tableau_initial == TRUE) f_ecrire_data(fichier_sauvegarde_tableau_initial, tab, n); if (affichage_tableaux == TRUE) { printf("\n"); ecrire_data(tab, n); } switch(type_tri) { case BULLE_NAIF: sondes = tri_bulle_naif(tab, n); if (affichage_tableaux == TRUE) { printf("Tableau trié (bulle naïf)\n"); ecrire_data(tab, n); } analyse_complexite(sondes, "bulle naïf", n); break; case BULLE_BOOL: sondes = tri_bulle_bool(tab, n); if (affichage_tableaux == TRUE) { printf("Tableau trié (bulle bool)\n"); ecrire_data(tab, n); } analyse_complexite(sondes, "bulle bool", n); break; case BULLE_OPT: sondes = tri_bulle_opt(tab, n); if (affichage_tableaux == TRUE) { printf("Tableau trié (bulle opt)\n"); ecrire_data(tab, n); } analyse_complexite(sondes, "bulle opt", n); break; case SELECTION: sondes = tri_selection(tab, n); if (affichage_tableaux == TRUE) { printf("Tableau trié (selection)\n"); ecrire_data(tab, n); } analyse_complexite(sondes, "selection", n); break; case INSERTION: sondes = tri_insertion(tab, n); if (affichage_tableaux == TRUE) { printf("Tableau trié (insertion)\n"); ecrire_data(tab, n); } analyse_complexite(sondes, "insertion", n); break; case TRIRAPIDE: sondes = tri_rapide(tab, 0, n-1); if (affichage_tableaux == TRUE) { printf("Tableau trié (rapide)\n"); ecrire_data(tab, n); } analyse_complexite(sondes, "rapide", n); break; case UNKNOWN: aide(argv[0]); exit(1); } if (sauvegarde_tableau_final == TRUE) f_ecrire_data(fichier_sauvegarde_tableau_final, tab, n); printf("\n"); return 0; }