Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.32 KB | None | 0 0
  1. #include <time.h>
  2.  
  3. #include <stdbool.h>
  4.  
  5. #include <stdio.h>
  6.  
  7. #include <stdlib.h>
  8.  
  9. #include <unistd.h>
  10.  
  11.  
  12.  
  13. void generertableaualeatoire(int *tab, int n){
  14.  
  15.     int i = 0;
  16.  
  17.  
  18.  
  19.     srand((unsigned)time(NULL));
  20.  
  21.     for (i = 0; i < n; i++){
  22.  
  23.         tab[i] = (rand() % 100);
  24.  
  25.     }
  26.  
  27. }
  28.  
  29.  
  30.  
  31. void affichertableau(int *tab, int n){
  32.  
  33.     int i = 0;
  34.  
  35.    
  36.  
  37.     printf("  - Mon tableau contient : [");
  38.  
  39.     for (i = 0; i < n; i++){
  40.  
  41.         printf("%i;", tab[i]);
  42.  
  43.     }
  44.  
  45.     printf("]\n");
  46.  
  47. }
  48.  
  49.  
  50.  
  51. void permute(int *taba, int *tabb){
  52.  
  53.     int temp;
  54.  
  55.     temp = *taba;
  56.  
  57.     *taba = *tabb;
  58.  
  59.     *tabb = temp;
  60.  
  61. }
  62.  
  63.  
  64.  
  65. void tri_selection(int *tabval, int n){
  66.  
  67.     int i, j, min;
  68.  
  69.    
  70.  
  71.     for (i = 0; i < (n-1); i++){
  72.  
  73.         min = i;
  74.  
  75.         for (j = i+1; j < n; j++){
  76.  
  77.             if (tabval[j] < tabval[min]){
  78.  
  79.                 min = j;
  80.  
  81.             }
  82.  
  83.         }
  84.  
  85.         permute(&tabval[i], &tabval[min]);
  86.  
  87.     }
  88.  
  89. }
  90.  
  91.  
  92.  
  93. void tri_insertion(int *tabval, int n){
  94.  
  95.     int i,p,j;
  96.  
  97.     int x;
  98.  
  99.    
  100.  
  101.     for (i = 0; i < n; i++){
  102.  
  103.        x = tabval[i];
  104.  
  105.        p = i-1;
  106.  
  107.        while (tabval[p] > x && p-- > 0) {}
  108.  
  109.        p++;
  110.  
  111.        for (j = i-1; j >= p; j--){
  112.  
  113.            tabval[j+1] = tabval[j];
  114.  
  115.        }
  116.  
  117.        tabval[p] = x;
  118.  
  119.     }
  120.  
  121. }
  122.  
  123.  
  124.  
  125. void tri_bulle(int *tabval, int n){
  126.  
  127.     int i;
  128.  
  129.     bool permutation;
  130.  
  131.     do{
  132.  
  133.         permutation = false;
  134.  
  135.         for(i=0; i<n-1; i++){    
  136.  
  137.             if(tabval[i]>tabval[i+1]){    
  138.  
  139.                 permute(&tabval[i], &tabval[i+1]);
  140.  
  141.                 permutation = true ;
  142.  
  143.             }
  144.  
  145.         }
  146.  
  147.         n--;
  148.  
  149.     }
  150.  
  151.     while(permutation);
  152.  
  153. }
  154.  
  155.  
  156.  
  157. void fusion(int tableau[],int deb1,int fin1,int fin2){
  158.  
  159.     int *table1;
  160.  
  161.     int deb2=fin1+1;
  162.  
  163.     int compt1=deb1;
  164.  
  165.     int compt2=deb2;
  166.  
  167.     int i;
  168.  
  169.  
  170.  
  171.     table1=malloc((fin1-deb1+1)*sizeof(int));
  172.  
  173.  
  174.  
  175.     for(i=deb1;i<=fin1;i++){
  176.  
  177.         table1[i-deb1]=tableau[i];
  178.  
  179.     }
  180.  
  181.                    
  182.  
  183.     for(i=deb1;i<=fin2;i++){        
  184.  
  185.         if (compt1==deb2){
  186.  
  187.             break;
  188.  
  189.         }
  190.  
  191.         else if (compt2==(fin2+1)){
  192.  
  193.             tableau[i]=table1[compt1-deb1];
  194.  
  195.             compt1++;
  196.  
  197.         }
  198.  
  199.         else if (table1[compt1-deb1]<tableau[compt2]){
  200.  
  201.             tableau[i]=table1[compt1-deb1];
  202.  
  203.             compt1++;
  204.  
  205.         }
  206.  
  207.         else{
  208.  
  209.             tableau[i]=tableau[compt2];
  210.  
  211.             compt2++;
  212.  
  213.         }
  214.  
  215.     }
  216.  
  217.     free(table1);
  218.  
  219. }
  220.  
  221.  
  222.  
  223. void tri_fusion_bis(int tableau[],int deb,int fin){
  224.  
  225.     if (deb!=fin){
  226.  
  227.         int milieu=(fin+deb)/2;
  228.  
  229.         tri_fusion_bis(tableau,deb,milieu);
  230.  
  231.         tri_fusion_bis(tableau,milieu+1,fin);
  232.  
  233.         fusion(tableau,deb,milieu,fin);
  234.  
  235.     }
  236.  
  237. }
  238.  
  239.  
  240.  
  241. void tri_fusion(int *tableau,int longueur){
  242.  
  243.     if (longueur>0){
  244.  
  245.         tri_fusion_bis(tableau,0,longueur-1);
  246.  
  247.     }
  248.  
  249. }
  250.  
  251.  
  252.  
  253. void jeuxdetest(int *tableau){
  254.  
  255. }
  256.  
  257.  
  258.  
  259. void inversertableau(int *tableau, int n){
  260.  
  261.     int i,j=n-1;
  262.  
  263.    
  264.  
  265.     for (i = 0; i <= ((n-1)/2); i++){
  266.  
  267.             permute(&tableau[i], &tableau[j]);
  268.  
  269.             j--;
  270.  
  271.     }    
  272.  
  273. }
  274.  
  275.  
  276.  
  277. int *inverseTab(int *tabval, int n)
  278.  
  279. {
  280.  
  281.       int i,j=0;
  282.  
  283.     int *t2;
  284.  
  285.  
  286.  
  287.     t2 = malloc(n*sizeof(int));
  288.  
  289.  
  290.  
  291.          for (i=(n-1);i >= 0;i--){
  292.  
  293.  
  294.  
  295.            t2[j] = tabval[i];
  296.  
  297.  
  298.  
  299.            j++;
  300.  
  301.       }  
  302.  
  303.  
  304.  
  305.       return t2;      
  306.  
  307. }
  308.  
  309.  
  310.  
  311. int main(){
  312.  
  313.     long double deb, fin, temps;
  314.  
  315.     int i = 0, choix, nbval;
  316.  
  317.     int *tabval;
  318.  
  319.  
  320.  
  321.  
  322.  
  323.     printf("* BASE DE LA COMPLEXITE, TP2 : *\n\n");
  324.  
  325.  
  326.  
  327.     printf("* MENU : *\n");
  328.  
  329.     printf("  - [1] : Tri par sélection\n");
  330.  
  331.     printf("  - [2] : Tri par insertion\n");
  332.  
  333.     printf("  - [3] : Tri à bulles\n");
  334.  
  335.     printf("  - [4] : Tri fusion\n");
  336.  
  337.     printf("  - [5] : Générer un tableau de nombre aléatoire\n\n");
  338.  
  339.     printf("Faite votre choix [0 pour quitter] : ");
  340.  
  341.     scanf("%i", &choix);
  342.  
  343.     switch(choix){
  344.  
  345.         case 0 : {
  346.  
  347.             _exit(0);
  348.  
  349.             break;
  350.  
  351.         }
  352.  
  353.         case 1 : {
  354.  
  355.             printf("\n\nSaisir le nombre de valeur à trier : ");
  356.  
  357.             scanf("%i", &nbval);
  358.  
  359.             tabval = (int *) malloc(nbval * sizeof(int));
  360.  
  361.             printf("\nSaisir les valeurs du tableau à trier : \n");
  362.  
  363.             for (i = 0; i < nbval; i++){
  364.  
  365.                 scanf("%i", &tabval[i]);
  366.  
  367.             }
  368.  
  369.             printf("\n\n-> Fonction : Tri_Selection(tabvaleur)\n");
  370.  
  371.             deb=clock();
  372.  
  373.             tri_selection(tabval, nbval);
  374.  
  375.             fin=clock();
  376.  
  377.             affichertableau(tabval, nbval);
  378.  
  379.             temps=(1000* (fin-deb)/CLOCKS_PER_SEC);
  380.  
  381.             printf("\n  > Temps : %Lf ms\n\n\n", temps);
  382.  
  383.             break;
  384.  
  385.         }
  386.  
  387.         case 2 : {
  388.  
  389.             printf("\n\nSaisir le nombre de valeur à trier : ");
  390.  
  391.             scanf("%i", &nbval);
  392.  
  393.             tabval = (int *) malloc(nbval * sizeof(int));
  394.  
  395.             printf("\nSaisir les valeurs du tableau à trier : \n");
  396.  
  397.             for (i = 0; i < nbval; i++){
  398.  
  399.                 scanf("%i", &tabval[i]);
  400.  
  401.             }
  402.  
  403.             printf("\n\n-> Fonction : Tri_Insertion(tabvaleur)\n");
  404.  
  405.             deb=clock();
  406.  
  407.             tri_insertion(tabval, nbval);
  408.  
  409.             fin=clock();
  410.  
  411.             affichertableau(tabval, nbval);
  412.  
  413.             temps=(1000* (fin-deb)/CLOCKS_PER_SEC);
  414.  
  415.             printf("\n  > Temps : %Lf ms\n\n\n", temps);
  416.  
  417.             break;
  418.  
  419.         }
  420.  
  421.         case 3 : {
  422.  
  423.             printf("\n\nSaisir le nombre de valeur à trier : ");
  424.  
  425.             scanf("%i", &nbval);
  426.  
  427.             tabval = (int *) malloc(nbval * sizeof(int));
  428.  
  429.             printf("\nSaisir les valeurs du tableau à trier : \n");
  430.  
  431.             for (i = 0; i < nbval; i++){
  432.  
  433.                 scanf("%i", &tabval[i]);
  434.  
  435.             }
  436.  
  437.             printf("\n\n-> Fonction : Tri_A_Bulle(tabvaleur)\n");
  438.  
  439.             deb=clock();
  440.  
  441.             tri_bulle(tabval, nbval);
  442.  
  443.             fin=clock();
  444.  
  445.             affichertableau(tabval, nbval);
  446.  
  447.             temps=(1000* (fin-deb)/CLOCKS_PER_SEC);
  448.  
  449.             printf("\n  > Temps : %Lf ms\n\n\n", temps);
  450.  
  451.             break;
  452.  
  453.         }
  454.  
  455.         case 4 : {
  456.  
  457.             printf("\n\nSaisir le nombre de valeur à trier : ");
  458.  
  459.             scanf("%i", &nbval);
  460.  
  461.             tabval = (int *) malloc(nbval * sizeof(int));
  462.  
  463.             printf("\nSaisir les valeurs du tableau à trier : \n");
  464.  
  465.             for (i = 0; i < nbval; i++){
  466.  
  467.                 scanf("%i", &tabval[i]);
  468.  
  469.             }
  470.  
  471.             printf("\n\n-> Fonction : Tri_Fusion(tabvaleur)\n");
  472.  
  473.             deb=clock();
  474.  
  475.             tri_fusion(tabval, nbval);
  476.  
  477.             fin=clock();
  478.  
  479.             affichertableau(tabval, nbval);
  480.  
  481.             temps=(1000* (fin-deb)/CLOCKS_PER_SEC);
  482.  
  483.             printf("\n  > Temps : %Lf ms\n\n\n", temps);
  484.  
  485.             break;
  486.  
  487.         }
  488.  
  489.         case 5 : {
  490.  
  491.             printf("\n\nSaisir le nombre de valeur à trier : ");
  492.  
  493.             scanf("%i", &nbval);
  494.  
  495.             tabval = (int *) malloc(nbval * sizeof(int));
  496.  
  497.             generertableaualeatoire(tabval, nbval);
  498.  
  499.             affichertableau(tabval, nbval);
  500.  
  501.             jeuxdetest(tabval);
  502.  
  503.             inversertableau(tabval, nbval);
  504.  
  505.             affichertableau(tabval, nbval);
  506.  
  507.             tabval = inverseTab(tabval, nbval);
  508.  
  509.             affichertableau(tabval, nbval);
  510.  
  511.             break;
  512.  
  513.         }
  514.  
  515.         default :{
  516.  
  517.             main();
  518.  
  519.         }
  520.  
  521.     }
  522.  
  523.     return 0;
  524.  
  525. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement