Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int *le_arquivo(const char *, int *);
- void ordena(int * , int);
- void insercao(int * , int );
- void selecao(int * , int );
- void swap (int * , int, int );
- int pivo (int* vet, int esq, int dir);
- int* quicksort(int *vet, int esq, int dir);
- int* shellsort(int *, int );
- void escreve_arquivo (int * , int);
- int main(int argc, const char *argv[]){
- int len;
- int *vet;
- int j;
- if(argc != 2){
- printf("favor digitar apenas o end. do arq.\n");
- exit(-1);
- }
- vet = le_arquivo(argv[1], &len);
- printf("len: %d\n", len);
- for(j = 0; j < len; j++){
- if(j == 0) printf("[ ");
- if(j == len-1) printf("%d ]", vet[j]);
- else printf("%d - ", vet[j]);
- }
- printf("\n");
- return 0;
- }
- int *le_arquivo(const char *endereco, int* len){
- int* vet;
- int teste;
- int i = 0;
- int j;
- //abrindo arquivo
- FILE* fp;
- fp = fopen(endereco, "r");
- if(!fp){
- printf("le_arquivo: arquivo nao encontrado\n");
- exit(-2);
- }
- //verifica tamanho do arquivo
- i = 0;
- while((fscanf(fp, "%d", &teste)!=EOF)){
- teste = 0;
- i++;
- }
- *len = i;
- //armazena vetor
- vet = (int*) malloc(i*sizeof(int));
- rewind(fp);
- i = 0;
- while((fscanf(fp, "%d", &teste)!=EOF)){
- vet[i] = teste;
- i++;
- }
- //imprime vetor
- for(j = 0; j < i; j++){
- if(j == 0) printf("[ ");
- if(j == i-1) printf("%d ]", vet[j]);
- else printf("%d - ", vet[j]);
- }
- printf("\n");
- //fechando arquivo
- fclose(fp);
- return vet;
- }
- void ordena(int *vet , int len)
- {
- int passos = 0;
- int memoria = 0;
- int leituras = 0;
- int escritas = 0;
- int tempo = 0;
- int i,j,aux;
- memoria = 5*sizeof(int);
- int inicio , fim;
- inicio = time(NULL);
- for (i=0; i < (len) ; i++)
- {
- for (j = i + 1 ;( j < len ); j++)
- {
- if (vet[i] > vet[j])
- {
- aux = vet[i];
- vet[i] = vet[j];
- vet[j] = aux;
- }
- }
- }
- for(j = 0; j < len; j++){
- if(j == 0) printf("[ ");
- if(j == len-1) printf("%d ]", vet[j]);
- else printf("%d - ", vet[j]);
- }
- fim = time(NULL);
- tempo = fim - tempo;
- printf ("Passos %d" , passos);
- printf ("Memoria %d" , memoria);
- printf ("Leituras %d" , leituras);
- printf ("Tempo %d" , tempo);
- }
- void insercao(int *vet , int len )
- {
- int passos = 0;
- int memoria = 0;
- int leituras = 0;
- int escritas = 0;
- int tempo = 0;
- memoria = 6*sizeof(int);
- int i,j,fim,inicio;
- int aux;
- int chave = 0;
- inicio = time(NULL);
- for (i=0;i<len;i++)
- {
- chave = vet[i];
- leituras += 1;
- aux = i;
- }
- while ((aux > 0) && (vet[aux-1] > chave))
- {
- leituras += 1;
- vet[aux] = vet[aux - 1];
- leituras += 1;
- escritas += 1;
- aux -= 1;
- passos += 1;
- vet[aux] = chave;
- escritas += 1;
- }
- for(j = 0; j < len; j++)
- {
- if(j == 0) printf("[ ");
- if(j == len-1) printf("%d ]", vet[j]);
- else printf("%d - ", vet[j]);
- }
- fim = time(NULL);
- tempo = fim - inicio;
- printf ("Passos %d" , passos);
- printf ("Memoria %d" , memoria);
- printf ("Leituras %d" , leituras);
- printf ("Tempo %d" , tempo);
- }
- void selecao(int *vet , int len )
- {
- int passos = 0;
- int memoria = 0;
- int leituras = 0;
- int escritas = 0;
- int tempo = 0;
- memoria = 7*sizeof(int);
- int tamanho,mini,test,inicio,fim,i,j;
- tamanho = vet[len];
- inicio = time(NULL);
- for (i=0; i<(len-1);i++)
- {
- mini = 1;
- for (j = i+1;j<(len);j++)
- {
- leituras += 2;
- passos += 1;
- if (vet[j]<vet[mini]);
- {
- mini=j;
- }
- }
- }
- test = vet[i];
- vet[j] = vet[mini];
- vet[mini] = vet[test];
- leituras += 2;
- escritas += 2;
- for(j = 0; j < len; j++)
- {
- if(j == 0) printf("[ ");
- if(j == len-1) printf("%d ]", vet[j]);
- else printf("%d - ", vet[j]);
- }
- fim = time(NULL);
- tempo = fim - inicio;
- printf ("Passos %d" , passos);
- printf ("Memoria %d" , memoria);
- printf ("Leituras %d" , leituras);
- printf ("Tempo %d" , tempo);
- }
- void swap (int *vet , int i, int j)
- {
- int aux;
- aux = vet[i];
- vet[i] = vet[j];
- vet[j] = aux;
- }
- int pivo (int* vet, int esq, int dir)
- {
- int i;
- int j;
- i = esq;
- for (j=esq+1;j < dir; j++)
- {
- if (vet[j] < vet[esq])
- {
- i++;
- swap(vet,i,j);
- }
- swap(vet,i,esq);
- }
- return i;
- }
- int* quicksort(int *vet, int esq, int dir)
- {
- int r;
- if (esq < dir)
- {
- r = pivo (vet, esq, dir);
- quicksort (vet, esq, r - 1);
- quicksort (vet, r + 1, dir);
- }
- return vet;
- }
- int* shellsort(int *vet, int len)
- {
- int passos = 0;
- int memoria = 0;
- int leituras = 0;
- int escritas = 0;
- int tempo = 0;
- memoria = 7*sizeof(int);
- int h,chave,aux,j,i,fim,inicio;
- inicio = time(NULL);
- h = len[vet]/2;
- leituras += 1;
- while (h > 0)
- {
- leituras += 1;
- for (i=0;i<(len);i++)
- {
- chave = vet[i];
- leituras += 1;
- aux = i;
- }
- }
- while ((aux >= h) && (vet[aux - h]) > chave)
- {
- vet[aux] = vet[aux - h];
- leituras += 1;
- escritas += 1;
- aux = aux - h;
- escritas += 1;
- vet[aux] = chave;
- leituras += 1;
- passos += 1;
- h = h/2.2;
- }
- for(j = 0; j < len; j++)
- {
- if(j == 0) printf("[ ");
- if(j == len-1) printf("%d ]", vet[j]);
- else printf("%d - ", vet[j]);
- }
- fim = time(NULL);
- tempo = fim - inicio;
- printf ("Passos %d" , passos);
- printf ("Memoria %d" , memoria);
- printf ("Leituras %d" , leituras);
- printf ("Tempo %d" , tempo);
- int opcao;
- if (len == 10000)
- { opcao=19;}
- if (len ==100000)
- { opcao=20;}
- if (len == 1000000)
- { opcao=21;}
- escreve_arquivo (opcao, vet, len, &tempo, &memoria, &leituras, &escritas, &passos);
- }
- void escreve_arquivo (int *vet , int len , opcao, &tempo, &memoria, &leituras, &escritas, &passos)//Chamar as funções
- {
- FILE* fp;
- switch (opcao)
- {
- case 1:
- int x;
- fp = fopen("10k.bbs", "w");
- for (x=0; x< len; x++)
- {
- fprintf(fp, "%d", vet[x]);
- fprintf (fp, " ");
- }
- fprintf (fp,"Passos %d" , passos);
- fprintf (fp,"Memoria %d" , memoria);
- fprintf (fp,"Leituras %d" , leituras);
- fprintf (fp,"Tempo %d" , tempo);
- fclose(fp)
- }
- }
- }
Add Comment
Please, Sign In to add comment