Reginaldojs

exercicio de casa

Jun 29th, 2012
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.25 KB | None | 0 0
  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <time.h>
  4.  
  5. int MenuMetodos()
  6. {
  7.    int x;
  8.  
  9.    printf("|--------------------------------------------|\n");
  10.    printf("|             METODOS DE ORDENACAO           |\n");
  11.    printf("|--------------------------------------------|\n");
  12.    printf("|   1 -> Metodos de Ordenacao por Selecao    |\n");
  13.    printf("|   2 -> Metodos de Ordenacao por Insercao   |\n");
  14.    printf("|   3 -> Metodos de Ordenacao por Bolha      |\n");
  15.    printf("|   4 -> Metodos de Ordenacao por Shellsort  |\n");
  16.    printf("|   5 -> Metodos de Ordenacao por Quicksort  |\n");
  17.    printf("|--------------------------------------------|\n");
  18.  
  19.    printf("Selecione um metodo de Ordenacao:  ");
  20.    scanf("%d",&x);
  21.    return x;
  22. }
  23.  
  24. int Menutamanho (void)
  25. {
  26.    int y, aceitar=0;
  27.    do {
  28.    printf("\n");
  29.    printf("|----------------------------|\n");
  30.    printf("|      TAMANHO DOS VETORES   |\n");
  31.    printf("|----------------------------|\n");
  32.    printf("|       -> 100               |\n");
  33.    printf("|       -> 1000              |\n");
  34.    printf("|       -> 10000             |\n");
  35.    printf("|       -> 100000            |\n");
  36.    printf("|----------------------------|\n");
  37.  
  38.    printf("Digite o tamanho do vetor:  ");
  39.    scanf("%d",&y);
  40.    if(y != 100 && y != 1000 && y != 10000 && y != 100000)
  41. {
  42.    printf("Digite o valor da Opcao correta!\n");  
  43.    aceitar=0;
  44.    continue;
  45. }
  46. else
  47.    aceitar=1;
  48. }
  49. while(aceitar == 0);  
  50. return y;
  51. }
  52.  
  53. int MenuOrdem()
  54. {
  55. int z;
  56.  
  57.     printf("\n");
  58.     printf("|-----------------------------|\n");
  59.     printf("|      ORDEM DOS VETORES      |\n");
  60.     printf("|-----------------------------|\n");
  61.     printf("|      1 -> Crescente         |\n");
  62.     printf("|      2 -> Decrescente       |\n");
  63.     printf("|      3 -> Aleatorio         |\n");
  64.     printf("|-----------------------------|\n");
  65.  
  66.     printf("Selecione a ordem de geracao dos vetores:  ");
  67.     scanf("%d",&z);
  68. return z;
  69. }
  70.  
  71.  
  72. // Crescente
  73. void geraCrescente(int vet[], int tamanho)
  74.  
  75. {  
  76.     int p;
  77.     for(p=0;p<tamanho;p++)
  78.   {
  79.     vet[p] = p;
  80.     printf("\t%5d", p);  
  81. }
  82. }
  83.  
  84. // Decrescente
  85. void geraDecrescente(int vet[], int tamanho)
  86. {
  87.      int p, i=0;
  88.      for(p=tamanho-1;p>=0;p--)
  89.      {
  90.          vet[i] = p;
  91.          i++;
  92.          printf("\t%5d", p);  
  93.      }
  94.  
  95. }
  96.  
  97.  
  98. // Aleatorio
  99. void geraAleatorio(int vet[], int tamanho)
  100. {
  101.      
  102.      
  103.      int i; //nao ha necessidade do "p".              
  104.      srand(time(NULL));  
  105.      for(i=0; i<tamanho; i++)
  106.    {
  107.      vet[i] = (rand() %tamanho)+1;//sempre q for sortear,faça somando com 1
  108.      printf("\t%5d", vet[i]); //aqui vc quer tds os numeros do vetor no indice i,e nao apenas um numero(p),como vc tinha feito!
  109.    }
  110. }
  111.    
  112. //Gerar o vetor
  113. int geraVetor (int vet[], int tamanho, int z)
  114. {
  115.    
  116.  
  117.     switch (z) // switch do geravetor.
  118.     {
  119.             case 1: geraCrescente (vet, tamanho); break;
  120.             case 2: geraDecrescente (vet, tamanho); break;
  121.             case 3: geraAleatorio (vet, tamanho); break;
  122.            
  123.             default: break;
  124. }      
  125. }
  126. // Ordenar conforme a escolha do usuário
  127. // Seleção
  128. void ordenaSelecao (int vet[], int tamanho)
  129. {
  130.    int i, j, aux, menor;  
  131.  
  132.    
  133.    // Ordenacao pelo metodo da seleção direta
  134.    for(i=0;i<tamanho-1;i++)
  135.    {
  136.       menor = i;
  137.       for(j=i+1;j<tamanho;j++)
  138.          {
  139.               if(vet[j] < vet[menor])
  140.               menor = j;
  141.          }
  142.       aux = vet[i];
  143.       vet[i] = vet[menor];
  144.       vet[menor] = aux;
  145.    
  146.    }
  147.  
  148.    // Mostra vetor ordenado
  149.    printf("\nVetor ordenado:\n");
  150.    for(i=0;i<tamanho;i++)
  151.        printf("\t %5d",i+1,vet[i]);
  152. }
  153.  
  154.  
  155. // Inserção
  156. void ordenaInsercao (int vet[], int tamanho)
  157. {              
  158.    int i, j, aux;
  159.              
  160.    for(i = 1; i < tamanho; i++)
  161.    {
  162.              
  163.       j = i;
  164.       while(vet[j] < vet[j - 1])
  165.       {
  166.              
  167.               aux = vet[j];
  168.               vet[j] = vet[j - 1];
  169.               vet[j - 1] = aux;
  170.               j--;    
  171.       if(j == 0)break;
  172.       }              
  173.   }
  174.      
  175.    for(i=0; i<tamanho; i++)
  176.        printf("\t %5d", vet[i]);  
  177. }
  178.  
  179.      
  180. // Bolha
  181. void ordenaBolha (int vet[], int qtd)
  182. {
  183.    int i, aux, tamanho=qtd;
  184.    int trocou;
  185.    do
  186.    {
  187.        qtd--;
  188.        trocou=0;
  189.        for (i=0;i<qtd;i++)
  190.       {
  191.        if (vet[i]>vet[i+1])
  192.               {
  193.                 aux = vet[i];
  194.                 vet[i] = vet[i+1];
  195.                 vet[i+1] = aux;
  196.                 trocou=1;
  197.               }
  198.       }
  199.      
  200.    } while (qtd!=0);
  201.      
  202.       for(i=0; i<tamanho; i++)
  203.       printf("\t %5d", vet[i]);  
  204. }
  205.      
  206.      
  207. // Quicksort
  208. void printV (int v[], int n)
  209. {
  210.      int i;
  211.      for(i =0;i<n;i++)
  212.      printf("\t %5d", v[i]);
  213. }
  214.  
  215. int separa (int v[], int p, int r)
  216. {
  217.      int c = v[p], i = p+1, j = r, t;              
  218.      while (1)
  219.    {                                    
  220.        while (i<= r && v[i] <= c) ++i;            
  221.        
  222.        while (c < v[j] && j>=0) --j;                      
  223.        
  224.        if (i >= j)
  225.        
  226.        break;                          
  227.        
  228.        t = v[i], v[i] = v[j], v[j] = t;            
  229.        ++i;
  230.        --j;                                  
  231.    }                  
  232.                              
  233.                 v[p] = v[j], v[j] = c;                      
  234.    
  235.  
  236.  
  237. return j;                                      
  238.      
  239. }
  240. void quicksort (int v[], int p, int r)
  241. {
  242.      int j;                        
  243.      if (p < r)
  244.    {                  
  245.        j = separa (v, p, r);      
  246.        quicksort (v, p, j-1);    
  247.        quicksort (v, j+1, r);      
  248.    }
  249. }
  250.  
  251.  
  252. // Shellsort
  253. void shellSort(int  vet[], int size)
  254. {
  255.     int i , j , value;
  256.     int gap = 1;
  257.     do
  258.     {
  259.         gap = 3*gap+1;
  260.     }
  261.     while(gap < size);
  262.     do
  263.     {
  264.       gap /= 3;
  265.       for(i = gap; i < size; i++)
  266.         {
  267.             value =vet[i];
  268.             j = i - gap;
  269.             while (j >= 0 && value < vet[j])
  270.             {
  271.                 vet [j + gap] =vet[j];
  272.                 j -= gap;
  273.             }
  274.             vet [j + gap] = value;
  275.         }
  276.     }
  277.     while ( gap > 1);
  278.    
  279.        for(i=0; i<size; i++)
  280.        printf("\t %5d", vet[i]);  
  281. }
  282.  
  283.  
  284. int main ()
  285. {
  286.     int metodos, tamanho, n, r,  vetores,s, ordem;    
  287.     int tempo;
  288.  
  289.     tamanho = Menutamanho ();
  290.     ordem = MenuOrdem();
  291.     int vet[tamanho];
  292.     geraVetor(vet, tamanho, ordem);
  293.  
  294.       switch (ordem)
  295. {
  296.        case 1: // crescente              
  297.                
  298.                metodos = MenuMetodos();
  299.                switch (metodos)
  300. {
  301.                      
  302.                    case 1: // Seleção
  303.                          
  304.                            tempo = clock();
  305.                            ordenaSelecao (vet, tamanho);
  306.                            tempo = clock() - tempo;
  307.                            
  308.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  309.                            system("pause");
  310.                            break;
  311.                            
  312.                    case 2: // Inserçao
  313.                            tempo = clock();
  314.                            ordenaInsercao (vet, tamanho);
  315.                            tempo = clock() - tempo;
  316.                            
  317.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  318.                            system("pause");
  319.                            break;
  320.                    case 3: // Bolha
  321.                            tempo = clock();
  322.                            ordenaBolha (vet, tamanho);
  323.                            tempo = clock() - tempo;
  324.                            
  325.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  326.                            system("pause");
  327.                            break;
  328.                            
  329.                    case 4: // Shell
  330.                            tempo = clock();
  331.                            shellSort (vet, tamanho);
  332.                            tempo = clock() - tempo;
  333.                            
  334.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  335.                            system("pause");
  336.                            break;
  337.                            
  338.                    case 5: // Quick
  339.                            tempo = clock();        
  340.                            printV (vet, tamanho);
  341.                            
  342.                            tempo = clock() - tempo;
  343.                            
  344.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  345.                            system("pause");
  346.                            break;
  347.                    default:
  348.                             break;
  349.  
  350. }
  351.                  
  352.                break;
  353.       case 2: // decrescente
  354.       metodos = MenuMetodos();
  355.                switch (metodos)
  356. {
  357.                      
  358.                    case 1: // Seleção
  359.                          
  360.                            tempo = clock();
  361.                            ordenaSelecao (vet, tamanho);
  362.                            tempo = clock() - tempo;
  363.                            
  364.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  365.                            system("pause");
  366.                            break;
  367.                            
  368.                    case 2: // Inserçao
  369.                            tempo = clock();
  370.                            ordenaInsercao (vet, tamanho);
  371.                            tempo = clock() - tempo;
  372.                            
  373.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  374.                            system("pause");
  375.                            break;
  376.                    case 3: // Bolha
  377.                            tempo = clock();
  378.                            ordenaBolha (vet, tamanho);
  379.                            tempo = clock() - tempo;
  380.                            
  381.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  382.                            system("pause");
  383.                            break;
  384.                            
  385.                    case 4: // Shell
  386.                            tempo = clock();
  387.                            shellSort (vet, tamanho);
  388.                            tempo = clock() - tempo;
  389.                            
  390.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  391.                            system("pause");
  392.                            break;
  393.                            
  394.                    case 5: // Quick
  395.                            tempo = clock();        
  396.                            printV (vet, tamanho);
  397.                            tempo = clock() - tempo;
  398.                            
  399.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  400.                            system("pause");
  401.                            break;
  402.                            
  403.                    default:
  404.                             break;
  405.  
  406. }
  407.                  
  408.                break;
  409.      case 3: // Aleatorio
  410.      metodos = MenuMetodos();
  411.                switch (metodos)
  412. {
  413.                      
  414.                    case 1: // Seleção
  415.                          
  416.                            tempo = clock();
  417.                            ordenaSelecao (vet, tamanho);
  418.                            tempo = clock() - tempo;
  419.                            
  420.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  421.                            system("pause");
  422.                            break;
  423.                            
  424.                    case 2: // Inserçao
  425.                            tempo = clock();
  426.                            ordenaInsercao (vet, tamanho);
  427.                            tempo = clock() - tempo;
  428.                            
  429.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  430.                            system("pause");
  431.                            break;
  432.                    case 3: // Bolha
  433.                            tempo = clock();
  434.                            ordenaBolha (vet, tamanho);
  435.                            tempo = clock() - tempo;
  436.                            
  437.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  438.                            system("pause");
  439.                            break;
  440.                            
  441.                    case 4: // Shell
  442.                            tempo = clock();
  443.                            shellSort (vet, tamanho);
  444.                            tempo = clock() - tempo;
  445.                            
  446.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  447.                            system("pause");
  448.                            break;
  449.                            
  450.                    case 5: // Quick
  451.                            tempo = clock();        
  452.                            printV (vet, tamanho);
  453.                            tempo = clock() - tempo;
  454.                            
  455.                            printf ("\n Tempo em milisegundo: %d \n", tempo);
  456.                            system("pause");
  457.                            break;
  458.                            
  459.                    default:
  460.                             break;
  461.  
  462. }
  463.                break;
  464.                }
  465.                
  466. system("pause");
  467. return 0;
  468. }
Advertisement
Add Comment
Please, Sign In to add comment