Ir para conteúdo

POWERED BY:

Arquivado

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

Angel***

Métodos de ordenação

Recommended Posts

Boa Noite!!

 

 

Estou fazendo um trabalho referente a métodos de ordenação em C++

Vamos pegar o método bolha para exemplo:

Como faço pra mostrar quantas trocas foram feitas e quanto tempo demorou??

Poderiam me ajudar??

 

Obrigada!!

 

 

Segue o método bolha:

 

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

	
void main(void)

{

	int vet[50],x,y,aux,qtde,*p,ord;

	printf("1-Crescente  2-Decrescente\n");
	scanf("%d",&ord);
	printf("quantas posicoes?");
	scanf("%d",&qtde);
	p=(int*)malloc(sizeof(int)*qtde);

	if(!p){
		printf("erro");
		exit(1);
		}


	x=0;
  randomize();
	for(x=0;x<qtde;x++)
		p[x]=random(1000);
	for(x=0;x<qtde;x++)
		printf(" %d",p[x]);
	for(y=qtde;y>0;y--)
	{
		for(x=0;x-1<y-1;x++)
		{
			if(ord==1)
			{
				if(p[x]>p[x+1])
				{
					aux=p[x+1];
					p[x+1]=p[x];
					p[x]=aux;
				}
			}
			else
			{
		  if(p[x]<p[x+1])
				{
					aux=p[x+1];
					p[x+1]=p[x];
					p[x]=aux;
				}
			}
		}
	  }
	printf("\n\n");
	for(x=0;x<qtde;x++)
		printf(" %d",p[x]);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom em relação a qnts trocas foram feitas é soh você usar uma variavel acumuladora a kd troca incrementa 1

agora em relação ao tempo nunca fiz nd do tipo + pesquisei pra você e achei isso: http://www.vivaolinux.com.br/comunidades/v...;codtopico=4185

http://www.descobre.com/forum/showthread.php?t=1260

 

[]'s

volte a postar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom em relação a qnts trocas foram feitas é soh você usar uma variavel acumuladora a kd troca incrementa 1

agora em relação ao tempo nunca fiz nd do tipo + pesquisei pra você e achei isso: http://www.vivaolinux.com.br/comunidades/v...;codtopico=4185

http://www.descobre.com/forum/showthread.php?t=1260

 

[]'s

volte a postar!

OI!

muito obrigada!

na verdade eu vou fazer vários metodos de ordanação, e depois de 'limpar'

a tela vou mostrar todos os metodos e quantas trocas cada um executou

por isso acho que terei que criar um vetor para gravar o resultado de cada troca...

mas estou um pouco perdida...

se você puder me ajuda agradeço!!

 

segue o codigo (alguns cases eu ainda não fiz!)

 

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

int main () {
 int j,aux,*p=NULL,qtde,opc,x,y, v[100];

 printf("\n\n\t\t .:Metodos de Ordenacao:. \n\n"); //menu de opçoes
 printf("\t1-Gerar Vetor\n\t2-Metodo Bolha\n\t3-Seleçao\n\t4-Inserçao\n\t5-Shell Sort\n\t6-Quick Sort\n\t7-Resultados\n\t8-Encerrar");

 int trocas=0;
 do
	{
	printf("\n\n\tInforme a opçao:\n\t");
	scanf("%d",&opc);

  if(opc>8||opc<1)
	 {
	 printf("Favor selecionar uma opção do menu.");
	 printf("\n");
	 }//if

  else
	  {
	  switch(opc)
	  {

		 case 1:	 //Gera o vetor com o numero de posiçoes escolhida

			printf("\tInforme o numero  posicoes?\n");
			scanf("%d",&qtde);
			if(p != NULL){
				free(p);
			}  //if
				p=(int*)malloc(sizeof(int)*qtde);
				if(!p) {
				   printf("erro");
				   exit(1);
				} //if
				x=0;
				srand(time(NULL));
				  for(x=0;x<qtde;x++)
					  p[x]=rand()%1000;
					  for(x=0;x<qtde;x++)
						 printf(" %d",p[x]);

		 break;


		 case 2:  //Metodo Bolha
		   	x=0;
			for(y=qtde;y>0;y--)
				{
	 		 	for(x=0;x-1<y-1;x++)
				{
				 if(p[x]>p[x+1])
					{
					aux=p[x+1];		
					p[x+1]=p[x];
					p[x]=aux;
					trocas = trocas +1;
					}  // if
				} //for
				} // for

				printf("\n\n");
		   
			for(x=0;x<qtde;x++)
				 {
				 printf(" %d",p[x]);
				 }//for
				 
		 break;


		 case 3:	//Selecao direta

		 printf("\tNao disponivel\n");

		 break;

		 case 4:  //Insercao Direta
		
			for (int i=1;i<qtde;i++)
			{
				  aux=v[i];
				  j=(i-1);
		   			while(j>=0 && v[j]>aux) {
			 			  v[j+1] = v[j];
			 			  trocas = trocas +1;
 						  j--;
					}   //while
					v[j+1] = aux;
			 } //for 
				  

		 break;

	 	case 5: //Shell Sort  
		 printf("\t Nao disponivel\n");
		break;   
		   
		case 6://Quick Sort

		printf("\t Nao disponivel\n");
		 	

		break;

		case 7: //Mostrar resultados das operações
		
		 system("cls");
		 printf("\n\t .:Resultados:.\n\n\n");
		 printf("trocas: %d \n\n\n", trocas);
		
		
		 system("pause");
		 opc = 8;
		break;

		case 8: //sair
		system("cls");
		break;

	}//switch
  }//else

 }//do
	 while(opc!=8);

	 if(p != NULL)
		 free(p);

}//main

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha o comecinho do seu código eu mudei um poquinho e veja:

int main () {
int j,aux,p[100],*q=NULL,qtde,opc,x,y, v[100];

printf("\n\n\t\t .:Metodos de Ordenacao:. \n\n"); //menu de opçoes
printf("\t1-Gerar Vetor\n\t2-Metodo Bolha\n\t3-Seleçao\n\t4-Inserçao\n\t5-Shell Sort\n\t6-Quick Sort\n\t7-Resultados\n\t8-Encerrar");

int trocas=0;
do
	{
	printf("\n\n\tInforme a opçao:\n\t");
	scanf("%d",&opc);
	switch(opc)
	  {

		 case 1:	 //Gera o vetor com o numero de posiçoes escolhida

			printf("\tInforme o numero  posicoes?\n");
			scanf("%d",&qtde);
			if(q != NULL){
				free(q);
			}  //if
				q=(int*)malloc(sizeof(int)*qtde);
				if(!q) {
				   printf("erro");
				   exit(1);
				} //if
				x=0;
				srand(time(NULL));
				  for(x=0;x<qtde;x++)
					  p[x]=rand()%1000;
					  for(x=0;x<qtde;x++)
						 printf(" %d",p[x]);

		 break;

		 case 2:  //Metodo Bolha
			x=0;
			for(y=qtde;y>0;y--) for(x=0;x-1<y-1;x++) if(p[x]>p[x+1])
					{
					aux=p[x+1];		
					p[x+1]=p[x];
					p[x]=aux;
					trocas = trocas +1;
					} 
				printf("\n\n");
			for(x=0;x<qtde;x++) printf(" %d",p[x]);				
		 break;

[]'s

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.