skydangerous

Untitled

Nov 2nd, 2011
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int *le_arquivo(const char *, int *);
  6. void ordena(int * , int);
  7. void insercao(int * , int );
  8. void selecao(int * , int );
  9. void swap (int * , int, int );
  10. int pivo (int* vet, int esq, int dir);
  11. int* quicksort(int *vet, int esq, int dir);
  12. int* shellsort(int *, int );
  13. void escreve_arquivo (int * , int);
  14.  
  15.  
  16. int main(int argc, const char *argv[]){
  17.     int len;
  18.     int *vet;
  19.     int j;
  20.     if(argc != 2){
  21.         printf("favor digitar apenas o end. do arq.\n");
  22.         exit(-1);
  23.     }
  24.    
  25.     vet = le_arquivo(argv[1], &len);
  26.     printf("len: %d\n", len);
  27.     for(j = 0; j < len; j++){
  28.         if(j == 0) printf("[ ");
  29.         if(j == len-1) printf("%d ]", vet[j]);
  30.         else printf("%d - ", vet[j]);
  31.     }
  32.     printf("\n");
  33.  
  34.     return 0;
  35. }
  36.  
  37. int *le_arquivo(const char *endereco, int* len){
  38.     int* vet;
  39.     int teste;
  40.     int i = 0;
  41.     int j;
  42.    
  43.     //abrindo arquivo
  44.     FILE* fp;
  45.     fp = fopen(endereco, "r");
  46.     if(!fp){
  47.         printf("le_arquivo: arquivo nao encontrado\n");
  48.         exit(-2);
  49.     }
  50.  
  51.     //verifica tamanho do arquivo
  52.     i = 0;
  53.     while((fscanf(fp, "%d", &teste)!=EOF)){
  54.         teste = 0;
  55.         i++;
  56.     }
  57.     *len = i;
  58.    
  59.     //armazena vetor
  60.     vet = (int*) malloc(i*sizeof(int));
  61.    
  62.     rewind(fp);
  63.  
  64.     i = 0;
  65.     while((fscanf(fp, "%d", &teste)!=EOF)){
  66.         vet[i] = teste;
  67.         i++;
  68.     }
  69.    
  70.     //imprime vetor
  71.     for(j = 0; j < i; j++){
  72.         if(j == 0) printf("[ ");
  73.         if(j == i-1) printf("%d ]", vet[j]);
  74.         else printf("%d - ", vet[j]);
  75.     }
  76.     printf("\n");
  77.    
  78.     //fechando arquivo
  79.     fclose(fp);
  80.    
  81.     return vet;
  82. }
  83.  
  84. void ordena(int *vet , int len)
  85. {
  86.     int passos = 0;
  87.     int memoria = 0;
  88.     int leituras = 0;
  89.     int escritas = 0;
  90.     int tempo = 0;
  91.     int i,j,aux;
  92.     memoria = 5*sizeof(int);
  93.     int inicio , fim;
  94.      inicio = time(NULL);
  95.  
  96.         for (i=0; i < (len) ; i++)  
  97.         {
  98.           for (j = i + 1 ;( j < len ); j++)    
  99.             {  
  100.              if (vet[i] > vet[j])            
  101.               {
  102.                   aux = vet[i];
  103.                   vet[i] = vet[j];
  104.                   vet[j] = aux;      
  105.         }
  106.             }    
  107.                }
  108.         for(j = 0; j < len; j++){
  109.             if(j == 0) printf("[ ");
  110.             if(j == len-1) printf("%d ]", vet[j]);
  111.             else printf("%d - ", vet[j]);
  112.     }
  113.      fim = time(NULL);
  114.      tempo = fim - tempo;
  115.  
  116.        printf ("Passos %d" , passos);
  117.        printf ("Memoria %d" , memoria);
  118.        printf ("Leituras %d" , leituras);
  119.        printf ("Tempo %d" , tempo);
  120. }
  121.  
  122.  
  123. void insercao(int *vet , int len )
  124. {
  125.      int passos = 0;
  126.      int memoria = 0;
  127.      int leituras = 0;
  128.      int escritas = 0;
  129.      int tempo = 0;
  130.      memoria = 6*sizeof(int);
  131.      int i,j,fim,inicio;
  132.      int aux;
  133.      int chave = 0;
  134.       inicio = time(NULL);
  135.       for  (i=0;i<len;i++)
  136.             {                      
  137.              chave = vet[i];
  138.              leituras += 1;
  139.              aux = i;
  140.              }
  141.        
  142.        while ((aux > 0) && (vet[aux-1] > chave))
  143.         {
  144.               leituras += 1;
  145.                vet[aux] = vet[aux - 1];
  146.                 leituras += 1;
  147.                  escritas += 1;
  148.                    aux -= 1;
  149.                      passos += 1;
  150.                        vet[aux] = chave;
  151.                          escritas += 1;
  152.         }
  153.        
  154.         for(j = 0; j < len; j++)
  155.        {
  156.             if(j == 0) printf("[ ");
  157.             if(j == len-1) printf("%d ]", vet[j]);
  158.             else printf("%d - ", vet[j]);
  159.        }
  160.         fim = time(NULL);
  161.         tempo = fim - inicio;
  162.        printf ("Passos %d" , passos);
  163.        printf ("Memoria %d" , memoria);
  164.        printf ("Leituras %d" , leituras);
  165.        printf ("Tempo %d" , tempo);
  166.  
  167. }
  168.      
  169. void selecao(int *vet , int len )
  170. {  
  171.  
  172.     int passos = 0;
  173.     int memoria = 0;
  174.     int leituras = 0;
  175.     int escritas = 0;
  176.     int tempo = 0;
  177.     memoria = 7*sizeof(int);
  178.     int tamanho,mini,test,inicio,fim,i,j;
  179.     tamanho = vet[len];
  180.      inicio = time(NULL);
  181.    
  182.    
  183.      for (i=0; i<(len-1);i++)
  184.     {        
  185.          mini = 1;
  186.           for (j = i+1;j<(len);j++)
  187.        {
  188.             leituras += 2;
  189.              passos += 1;
  190.                 if (vet[j]<vet[mini]);
  191.             {                  
  192.                     mini=j;
  193.     }
  194.         }
  195.             }
  196.                  test = vet[i];
  197.                  vet[j] = vet[mini];
  198.                  vet[mini] = vet[test];
  199.                  leituras += 2;
  200.                  escritas += 2;
  201.          
  202.           for(j = 0; j < len; j++)
  203.          {
  204.             if(j == 0) printf("[ ");
  205.             if(j == len-1) printf("%d ]", vet[j]);
  206.             else printf("%d - ", vet[j]);
  207.          }
  208.      fim = time(NULL);
  209.      tempo = fim - inicio;
  210.      printf ("Passos %d" , passos);
  211.      printf ("Memoria %d" , memoria);
  212.      printf ("Leituras %d" , leituras);
  213.      printf ("Tempo %d" , tempo);
  214. }
  215.  
  216. void swap (int *vet , int i, int j)
  217. {
  218.     int aux;
  219.     aux = vet[i];
  220.     vet[i] = vet[j];
  221.     vet[j] = aux;
  222. }
  223.  
  224.  
  225. int pivo (int* vet, int esq, int dir)
  226. {
  227.      int i;
  228.       int j;
  229.      i = esq;
  230.      for (j=esq+1;j < dir; j++)
  231.     {
  232.           if (vet[j] < vet[esq])
  233.             {
  234.                 i++;
  235.                 swap(vet,i,j);
  236.             }
  237.        
  238.         swap(vet,i,esq);
  239.     }
  240.     return i;
  241.  
  242. }              
  243. int* quicksort(int *vet, int esq, int dir)
  244. {
  245.     int r;
  246.     if (esq < dir)
  247.     {
  248.         r = pivo (vet, esq, dir);  
  249.         quicksort (vet, esq, r - 1);
  250.         quicksort (vet, r + 1, dir);
  251.     }  
  252.     return vet;
  253.  
  254. }
  255.  
  256. int* shellsort(int *vet, int len)
  257. {
  258.     int passos = 0;
  259.     int memoria = 0;
  260.     int leituras = 0;
  261.     int escritas = 0;
  262.     int tempo = 0;
  263.     memoria = 7*sizeof(int);
  264.     int h,chave,aux,j,i,fim,inicio;
  265.     inicio = time(NULL);   
  266.    
  267.     h = len[vet]/2;
  268.     leituras += 1;
  269.     while (h > 0)
  270.     {
  271.         leituras += 1;
  272.         for (i=0;i<(len);i++)
  273.       {
  274.             chave = vet[i];
  275.             leituras += 1;
  276.             aux = i;
  277.       }
  278. }
  279.             while ((aux >= h) && (vet[aux - h]) > chave)
  280.             {
  281.                 vet[aux] = vet[aux - h];
  282.                 leituras += 1;
  283.                 escritas += 1;
  284.                 aux = aux - h;
  285.                 escritas += 1;
  286.                 vet[aux] = chave;
  287.                 leituras += 1;
  288.                 passos += 1;
  289.                 h = h/2.2;
  290.             }
  291.             for(j = 0; j < len; j++)
  292.             {
  293.             if(j == 0) printf("[ ");
  294.             if(j == len-1) printf("%d ]", vet[j]);
  295.             else printf("%d - ", vet[j]);
  296.             }
  297.            
  298.       fim = time(NULL);
  299.       tempo = fim - inicio;
  300.      printf ("Passos %d" , passos);
  301.      printf ("Memoria %d" , memoria);
  302.      printf ("Leituras %d" , leituras);
  303.      printf ("Tempo %d" , tempo);
  304.       int opcao;
  305.     if (len == 10000)
  306.     {   opcao=19;}
  307.     if (len ==100000)  
  308.     {   opcao=20;}
  309.     if (len == 1000000)
  310.     {   opcao=21;}
  311.         escreve_arquivo (opcao, vet, len, &tempo, &memoria, &leituras, &escritas, &passos);
  312. }
  313.    
  314.    
  315. void escreve_arquivo (int *vet , int len , opcao, &tempo, &memoria, &leituras, &escritas, &passos)//Chamar as funções
  316. {
  317.      FILE* fp;
  318.    
  319.     switch (opcao)
  320.     {
  321.            case 1:
  322.                 int x;
  323.                 fp = fopen("10k.bbs", "w");
  324.             for (x=0; x< len; x++)
  325.             {
  326.                 fprintf(fp, "%d", vet[x]);
  327.                 fprintf (fp, " ");
  328.        }
  329.            
  330.            fprintf (fp,"Passos %d" , passos);
  331.            fprintf (fp,"Memoria %d" , memoria);
  332.            fprintf (fp,"Leituras %d" , leituras);
  333.            fprintf (fp,"Tempo %d" , tempo);
  334.            fclose(fp)
  335.            }  
  336.     }
  337. }
  338.  
  339.  
  340.  
  341.  
  342.  
Advertisement
Add Comment
Please, Sign In to add comment