Пример #1
0
/*
 * exécute le tri
 */
void
execute_tri() {
  int i;
  O1 = (ordre*) calloc(grandeur_tableau, sizeof(ordre));
  for (i = 0; i < grandeur_tableau; i++) {
    O1[i].index_initial = i;
    O1[i].valeure = T1[i];
    O1[i].next = NULL;
  }

  //exécute le tri selon le choix fait auparavant
  switch (choixTri) {
  case 1:
    mergeSort(O1, grandeur_tableau, Rang);
    tri = "tri fusion";
    break;
  case 2:
    tri_insertion(O1, grandeur_tableau, Rang);
    tri = "tri par insertion";
    break;
  case 3:
    radixsort(O1, grandeur_tableau, Rang);
    tri = "tri par base";
    break;
  case 4:
    heapsort(O1, grandeur_tableau, Rang);
    tri = "tri par tas";
    break;
  case 5:
    pigeonnier(O1, grandeur_tableau, Rang);
    tri = "tri par pigeonnier";
    break;
  case 6:
    rapide(O1, grandeur_tableau, Rang);
    tri = "tri rapide";
    break;
  default:
    tri = "sans tri";
    break;
  }
}
Пример #2
0
   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;
   }
Пример #3
0
/*

Procédure créant les fichiers contenant le nombre moyen d'affectations
et de comparaisons pour toutes les tailles pour un algorithme. La procédure
prend le choix du tri en paramètre ainsi que les noms des fichiers à créer.

*/
void statistiques(char typeTri, char* fichierAff, char* fichierComp){
	
	int sommeComp, sommeAff, moyenneComp, moyenneAff, i, j, comparaisons, affectations, taille;

	int tableau[10000];
	
	FILE* fichier1 = fopen(fichierAff, "w");
	FILE* fichier2 = fopen(fichierComp, "w");
	
	for(i=0;i<10;i++){
		taille = valeur[i];
		sommeComp=0;
		sommeAff=0;
		for(j=0;j<N;j++){			
			init_tab(tableau, taille);
			comparaisons = 0;
			affectations = 0;
			switch (typeTri) {
			
				case 'S':
					tri_selection(tableau,taille, &comparaisons, &affectations);
					break;
					
				case 'I':
					tri_insertion(tableau,taille, &comparaisons, &affectations);
					break;
					
				case 'B':
					tri_bulle(tableau,taille, &comparaisons, &affectations);
					break;
					
				case 'D':
					q_sort(tableau, 0, taille-1, PIVOT_DEBUT, &comparaisons, &affectations);
					break;		
					
				case 'F':
					q_sort(tableau, 0, taille-1, PIVOT_FIN, &comparaisons, &affectations);
					break;
					
				case 'M':
					q_sort(tableau, 0, taille-1, PIVOT_MEDIAN, &comparaisons, &affectations);
					break;
					
				case 'A':
					q_sort(tableau, 0, taille-1, PIVOT_RANDOM, &comparaisons, &affectations);
					break;	
			}

			
			sommeComp = sommeComp + comparaisons;
			sommeAff = sommeAff + affectations;
		}
		moyenneComp = sommeComp / N;
		moyenneAff = sommeAff / N;
		fprintf(fichier1, "%d %d\n", taille, moyenneAff);
		fprintf(fichier2, "%d %d\n", taille, moyenneComp);
	}
	fclose(fichier1);
	fclose(fichier2);
	printf("Enregistrement des statistiques terminé.\n");
}