Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marolly

Programação

Recommended Posts

estou tentando colocar tempo de ordenação mesmo programa, mas esta mostrando como tempo 0 de ordenação. nao sei oq fazer mais se alguem poder me ajudar agradeço desde ja.

 

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

void bubble(char *item, int count);
void select(char *item, int count);
void shell(char *tem,int count);
void quick(char *item, int count);
void qs(char *item,int left,int right);

int main(void)
{
  int opcao;
  clock_t inicio, fim;
  char s[500];
  printf("\n ******** Trabalho Programacao Estruturada *********\n\n");

  do
  {
     printf("\n Digite a Sequencia de Caracteres (Numeros ou String) a ser Ordenado: \n\n");

     scanf("%s", &s );

     printf("\n1 - Bubble Sort\n");
     printf("2 - Select Sort\n");
     printf("3 - Shell  Sort\n");
     printf("4 - Quick  Sort\n");
     printf("0 - Sair\n");

     printf("\n Qual metodo a ser ordenado: ");

     scanf("%d", &opcao);

     switch (opcao)
     {
        case 1:
        {
           inicio = clock();
           bubble(s, strlen(s));
           fim = clock();

           printf("\n Ordenados pelo metodo Bubble Sort: %s\n",s);
           printf("\nO Tempo Gasto eh de: %ld\n",(fim - inicio));
           break;
        }
        case 2:
        {
           inicio = clock();
           select(s, strlen(s));
           fim = clock();

           printf("\n Ordenados pelo metodo Selection Sort: %s\n",s);
           printf("\nO Tempo Gasto eh de: %ld\n",(fim - inicio));
           break;
        }
        case 3:
        {
           inicio = clock();
           shell(s, strlen(s));
           fim = clock();

           printf("\n Ordenados pelo metodo Shell Sort: %s", s);
           printf("\nO Tempo Gasto eh de: %ld\n",(fim - inicio));
           break;
        }
        case 4:
        {
           inicio = clock();
           quick(s, strlen(s));
           fim = clock();

           printf("\n Ordenados pelo metodo Quick Sort: %s\n",s);
           printf("\nO Tempo Gasto eh de: %ld\n",(fim - inicio));
           break;
        }
        case 0:
        {
           exit(0);
        }
     }
  } while ( opcao != 5 );
}


// A ordenação por Bubble Sort //

void bubble(char *item, int count)
{
  register int a,b;
  register char t;

  for (a=1;a<count;++a)
     for(b=count-1;b>=a; --B){
     if (item[b-1] > item[b]) {

        t=item[b-1];
        item[b-1]=item[b];
        item[b]=t;
     }
     }

}

// ordenação por Selection Sort //

void select(char *item, int count)
{
  register int a,b,c;


  int exchange;
  char t; 
  for(a=0;a<count-1;++a) {
     exchange=0;
     c=a;
     t=item[a];
     for (b=a+1; b<count;++B){
        if (item[b]<t){
           c=b;
           t=item[b];
           exchange=1;
        }
     }
     if (exchange){
        item[c]=item[a];
        item[a]=t;
     }
  }
}

// Ordenação por Shell Sort //

void shell(char * a, int n)
{
    int i,j,x;
    int h=1;
    do {h=h*3+1;} while (h<n);
    do
    { 
        h/=3;
        for(i=h;i<n;i++)
        {
           x=a[i];
           j=i-h;
           while(j>=0 && x<a[j])
           {
              a[j+h]=a[j];
              j-=h;                  
           }
              a[j+h]=x;                   
        }

    }while(h>1);
}

// Ordenação por Quick Sort //
//função inicial //

void quick(char *item, int count)
{
  qs(item,0,count-1);
}

void qs(char *item,int left,int right)
{
  register int i,j;
  char x,y;

  i=left;j=right;
  x=item[(left+right)/2];

  do{
     while(item[i]<x && i<right) i++;
     while(x<item[j] && j>left) j--;

     if (i<=j){
        y=item[i];
        item[i]=item[j];
        item[j]=y;
        i++;j--;
     }
  } while(i<=j);

  if (left<j)  qs(item,left,j);
  if (i<right) qs(item,i,right);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não sei se estou errado (aqui é um fórum de discussão, então vou falar), mas eu acho que a utilização do DO é antiga e "errada".

 

Não. É certíssima e até recomendada em alguns casos, mas, como são pouquíssimos, é pouco utilizado. Só isso. Nâo é antigo. Afinal, se você precisa de um loop que execute AO MENOS uma vez, é muito melhor usar do-while() do que um while(), pois ganha-se desempenho, já que o while() vai checar sua condição antes, mesmo que tenha-se que executar o loop uma vez pelo o menos, enquanto o do-while() só vai checar o necessário, no caso.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.