Commit 7d9758ca authored by Felipe's avatar Felipe

Feito o QuickIt e contagem de tempo

parent 45aa6767
......@@ -36,14 +36,22 @@ void BubbleSort(int vetor[], int tam)
int Mediana(int vetor[], int esq, int meio, int dir)
{
if((vetor[esq] >= vetor[dir]) && (vetor[esq] <= vetor[meio]))
return esq;
else if((vetor[dir] >= vetor[esq]) && (vetor[dir] <= vetor[meio]))
if(vetor[esq] >= vetor[dir])
if(vetor[esq] <= vetor[meio])
return esq;
else if(vetor[meio] >= vetor[dir])
return meio;
else
return dir;
else if(vetor[dir] >= vetor[meio])
if(vetor[meio] >= vetor[esq])
return meio;
else
return esq;
else
return dir;
else if((vetor[meio] >= vetor[esq]) && (vetor[meio] <= vetor[dir]))
return meio;
else
return meio;
printf("bugou");
return meio;
}
void Particao(int vetor[], int esq, int dir, int *posicaoPivo)
......@@ -87,21 +95,20 @@ void QuickRec(int vetor[], int esq, int dir)
}
}
void QuickIt()
void QuickIt(int vetor[], tipoPilha *pilha, int esq, int dir)
{
tipoPilha pilha;
InicPilha(&pilha);
Push(&pilha, esq, dir);
while(!VaziaPilha(pilha))
Push(pilha, esq, dir);
while(!VaziaPilha(*pilha))
{
int posicaoPivo;
tipoCoordenada auxC;
auxC = Pop(&pilha);
auxC = Pop(pilha);
Particao(vetor, auxC.cesq, auxC.cdir, &posicaoPivo);
Push(&pilha, //TODO//
Push(pilha, auxC.cesq, posicaoPivo - 1);
Push(pilha, posicaoPivo + 1, auxC.cdir);
}
}
......@@ -134,9 +141,61 @@ int PesqBin(int vetor[], int elem, int esq, int dir)
return PesqBin(vetor, elem, esq, meio-1);
}
void TempoExecucao()
void TempoExecucao(int vetor[], int tam, int numMax)
{
int i;
clock_t begin, end;
double time_spent;
i = 1;
begin = clock();
while(i <= 10000)
{
GeraVetor(vetorDes, tam, numMax);
SelectSort(vetorDes, tam);
i++;
}
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("tempo do SelectSort: %lf\n", time_spent);
i = 1;
begin = clock();
while(i <= 10000)
{
GeraVetor(vetorDes, tam, numMax);
BubbleSort(vetorDes, tam);
i++;
}
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("tempo do BubbleSort: %lf\n", time_spent);
i = 1;
begin = clock();
while(i <= 10000)
{
GeraVetor(vetorDes, tam, numMax);
QuickRec(vetorDes, 1, tam);
i++;
}
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("tempo do QuickRec: %lf\n", time_spent);
i = 1;
begin = clock();
tipoPilha pilha;
InicPilha(&pilha);
while(i <= 10000)
{
GeraVetor(vetorDes, tam, numMax);
QuickIt(vetorDes, &pilha, 1, tam);
i++;
}
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("tempo do QuickIt: %lf\n", time_spent);
}
void OrdenaVetor(int vetorDes[], int vetorOrd[], int ordenacao, int tam)
......@@ -157,8 +216,11 @@ void OrdenaVetor(int vetorDes[], int vetorOrd[], int ordenacao, int tam)
case 3:
QuickRec(vetorOrd, 1, tam);
break;
case 4:
QuickIt();
case 4: ;
tipoPilha pilha;
InicPilha(&pilha);
QuickIt(vetorOrd, &pilha, 1, tam);
break;
}
}
......@@ -269,8 +331,8 @@ main(){
break;
case 5:
/*TODO*/
break;
TempoExecucao(vetorOrd, tam, numMax);
break;
}
}
}
......@@ -12,14 +12,14 @@ int vetorDes[MAXVETOR], vetorOrd[MAXVETOR];
void SelectSort(int vetor[], int tam);
void BubbleSort(int vetor[], int tam);
void QuickRec(int vetor[], int esq, int dir);
void QuickIt();
void QuickIt(int vetor[], tipoPilha *pilha ,int esq, int dir);
int PesqSec(int vetor[], int tam, int elem);
int PesqBin(int vetor[], int elem, int esq, int dir);
int Mediana(int vetor[], int esq, int meio, int dir);
void Particao(int vetor[], int esq, int dir, int *posicaoPivo);
void TempoExecucao();
void TempoExecucao(int vetor[], int tam, int numMax);
void OrdenaVetor(int vetorDes[], int vetorOrd[], int ordenacao, int tam);
void GeraVetor(int vetor[], int tam, int numMax);
void Setup(int vetorDes[], int vetorOrd[], int *tam, int *numMax);
......
#ifndef _PILHA_H
#define _PILHA_H
#include<stdin.io>
#include<stdio.h>
#define MAXPILHA 16862
......@@ -26,9 +26,12 @@ int VaziaPilha(tipoPilha pilha)
void Push(tipoPilha *pilha, int esquerda, int direita)
{
pilha->topo++;
pilha->coordenada[pilha->topo].cesq = esquerda;
pilha->coordenada[pilha->topo].cdir = direita;
if(esquerda < direita)
{
pilha->topo++;
pilha->coordenada[pilha->topo].cesq = esquerda;
pilha->coordenada[pilha->topo].cdir = direita;
}
}
tipoCoordenada Pop(tipoPilha *pilha)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment