Commit c462147e authored by Leonardo Krambeck's avatar Leonardo Krambeck

melhorado1 = teste de ordenacao, melhorado2 = usando so 1 v_aux, adiciona log de insertion

parent 4c224010
......@@ -17,8 +17,8 @@ int main () {
/* Mude aqui o numero de iterações, tamanho maximo e nome do algoritmo */
int MAX_IT = 100;
int TAM_MAX = 100000;
char *algoritmo = "insertionsort (R)";
int TAM_MAX = 1000000;
char *algoritmo = "mergesort_melhorado2 (R)";
for ( tam=10; tam <= TAM_MAX; tam*=10 )
{
......@@ -36,7 +36,7 @@ int main () {
ini = timestamp();
/* Mude aqui o algoritmo usado */
insertionsort (v,0,tam-1);
mergesort_melhorado (v,0,tam-1);
fim = timestamp();
soma_tempo += (fim-ini);
......@@ -45,7 +45,7 @@ int main () {
embaralha_vetor (v,tam);
}
printf("Algoritmo: %25s | Iterações: %5d | Tamanho: %10d | Tempo: %15f milisegundos.\n", algoritmo, MAX_IT, tam, soma_tempo/MAX_IT);
printf("Algoritmo: %25s | Iterações: %7d | Tamanho: %10d | Tempo: %15f milisegundos.\n", algoritmo, MAX_IT, tam, soma_tempo/MAX_IT);
free (v);
......
Algoritmo: insertionsort (R) | Iterações: 1000000 | Tamanho: 10 | Tempo: 0.000253 milisegundos.
Algoritmo: insertionsort (R) | Iterações: 1000000 | Tamanho: 20 | Tempo: 0.000651 milisegundos.
Algoritmo: insertionsort (R) | Iterações: 1000000 | Tamanho: 30 | Tempo: 0.001202 milisegundos.
Algoritmo: insertionsort (R) | Iterações: 1000000 | Tamanho: 40 | Tempo: 0.001922 milisegundos.
Algoritmo: insertionsort (R) | Iterações: 1000000 | Tamanho: 50 | Tempo: 0.002805 milisegundos.
Algoritmo: quicksort_mediana3 (R) | Iterações: 1000000 | Tamanho: 10 | Tempo: 0.000580 milisegundos.
Algoritmo: quicksort_mediana3 (R) | Iterações: 1000000 | Tamanho: 20 | Tempo: 0.001432 milisegundos.
Algoritmo: quicksort_mediana3 (R) | Iterações: 1000000 | Tamanho: 30 | Tempo: 0.002359 milisegundos.
Algoritmo: quicksort_mediana3 (R) | Iterações: 1000000 | Tamanho: 40 | Tempo: 0.003291 milisegundos.
Algoritmo: quicksort_mediana3 (R) | Iterações: 1000000 | Tamanho: 50 | Tempo: 0.004255 milisegundos.
Algoritmo: mergesort_basico (R) | Iterações: 1000000 | Tamanho: 10 | Tempo: 0.000859 milisegundos.
Algoritmo: mergesort_basico (R) | Iterações: 1000000 | Tamanho: 20 | Tempo: 0.001973 milisegundos.
Algoritmo: mergesort_basico (R) | Iterações: 1000000 | Tamanho: 30 | Tempo: 0.003167 milisegundos.
Algoritmo: mergesort_basico (R) | Iterações: 1000000 | Tamanho: 40 | Tempo: 0.004464 milisegundos.
Algoritmo: mergesort_basico (R) | Iterações: 1000000 | Tamanho: 50 | Tempo: 0.005841 milisegundos.
Algoritmo: quicksort_inicio (R) | Iterações: 1000000 | Tamanho: 10 | Tempo: 0.000475 milisegundos.
Algoritmo: quicksort_inicio (R) | Iterações: 1000000 | Tamanho: 20 | Tempo: 0.001170 milisegundos.
Algoritmo: quicksort_inicio (R) | Iterações: 1000000 | Tamanho: 30 | Tempo: 0.002102 milisegundos.
Algoritmo: quicksort_inicio (R) | Iterações: 1000000 | Tamanho: 40 | Tempo: 0.003168 milisegundos.
Algoritmo: quicksort_inicio (R) | Iterações: 1000000 | Tamanho: 50 | Tempo: 0.003643 milisegundos.
Algoritmo: quicksort_meio (R) | Iterações: 1000000 | Tamanho: 10 | Tempo: 0.000509 milisegundos.
Algoritmo: quicksort_meio (R) | Iterações: 1000000 | Tamanho: 20 | Tempo: 0.001343 milisegundos.
Algoritmo: quicksort_meio (R) | Iterações: 1000000 | Tamanho: 30 | Tempo: 0.002344 milisegundos.
Algoritmo: quicksort_meio (R) | Iterações: 1000000 | Tamanho: 40 | Tempo: 0.003331 milisegundos.
Algoritmo: quicksort_meio (R) | Iterações: 1000000 | Tamanho: 50 | Tempo: 0.004097 milisegundos.
Algoritmo: quicksort_fim (R) | Iterações: 1000000 | Tamanho: 10 | Tempo: 0.000422 milisegundos.
Algoritmo: quicksort_fim (R) | Iterações: 1000000 | Tamanho: 20 | Tempo: 0.001105 milisegundos.
Algoritmo: quicksort_fim (R) | Iterações: 1000000 | Tamanho: 30 | Tempo: 0.001833 milisegundos.
Algoritmo: quicksort_fim (R) | Iterações: 1000000 | Tamanho: 40 | Tempo: 0.002651 milisegundos.
Algoritmo: quicksort_fim (R) | Iterações: 1000000 | Tamanho: 50 | Tempo: 0.003793 milisegundos.
......@@ -305,6 +305,17 @@ void copia_vetor (int v[], int aux[], int ini, int fim)
}
}
void copia_vetor2 (int v[], int aux[], int ini, int fim)
{
int i, tam = fim-ini+1;
for ( i=0; i < tam; i++ )
{
v[ini] = aux[i];
ini++;
}
}
/* intercala sem melhorias */
void intercala_basico (int v[], int ini, int meio, int fim)
{
......@@ -370,48 +381,48 @@ void mergesort_basico (int v[], int ini, int fim)
void intercala_melhorado (int v[], int ini, int meio, int fim)
{
/* implementar passar o vetor por parametro */
int tam_esq = meio - ini + 1;
int tam_dir = fim - meio;
int esquerdo[tam_esq], direito[tam_dir];
int tam_aux = fim-ini+1;
int aux[tam_aux];
copia_vetor (v, esquerdo, ini, meio);
copia_vetor (v, direito, meio+1, fim);
int i = 0;
int j = 0;
int i = ini;
int j = meio +1;
int k = 0;
/* intercala entre os dois vetores auxiliares */
while ( (i < tam_esq) && (j < tam_dir) )
/* intercala entre as duas seções do vetor aux */
while ( (i <= meio) && (j <= fim) )
{
if ( esquerdo[i] < direito[j] )
if ( v[i] < v[j] )
{
v[ini] = esquerdo[i];
aux[k] = v[i];
i++;
}
else
{
v[ini] = direito[j];
aux[k] = v[j];
j++;
}
ini++;
k++;
}
/* copia o restante do vetor que ainda houver elementos */
while (i < tam_esq)
while (i <= meio)
{
v[ini] = esquerdo[i];
aux[k] = v[i];
i++;
ini++;
k++;
}
while (j < tam_dir)
while (j <= fim)
{
v[ini] = direito[j];
aux[k] = v[j];
j++;
ini++;
k++;
}
copia_vetor2 (v, aux, ini, fim);
}
/* testa se duas particoes do merge já estao ordenadas */
......@@ -423,15 +434,6 @@ int esta_ordenado (int v[], int meio)
return 0;
}
/* testa se duas particoes do merge estão ordenadas invertidas */
int esta_invertido (int v[], int ini, int fim)
{
if ( v[ini] > v[fim] )
return 1;
return 0;
}
/* mergesort com melhorias */
void mergesort_melhorado (int v[], int ini, int fim)
{
......@@ -440,22 +442,9 @@ void mergesort_melhorado (int v[], int ini, int fim)
if (ini < fim)
{
if (esta_ordenado(v, meio))
printf ("ta ordenado lek\n");
/*else if (esta_invertido(v, ini, fim))
printf ("ta ordenado invertido lek\n");
falta inverter */
else
{
int aux[fim-ini+1];
copia_vetor (v, aux, ini, fim);
mergesort_basico (v, ini, meio);
mergesort_basico (aux, meio+1, fim);
intercala_basico (v, ini, meio, fim);
}
mergesort_melhorado (v, ini, meio);
mergesort_melhorado (v, meio+1, fim);
if (!esta_ordenado (v, meio))
intercala_melhorado (v, ini, meio, fim);
}
}
......@@ -38,3 +38,10 @@ Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 1000
Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 100000 | Tempo: 23.164280 milisegundos.
Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 1000000 | Tempo: 271.175571 milisegundos.
Algoritmo: mergesort_melhorado2 (R) | Iterações: 100 | Tamanho: 10 | Tempo: 0.002358 milisegundos.
Algoritmo: mergesort_melhorado2 (R) | Iterações: 100 | Tamanho: 100 | Tempo: 0.038579 milisegundos.
Algoritmo: mergesort_melhorado2 (R) | Iterações: 100 | Tamanho: 1000 | Tempo: 0.242908 milisegundos.
Algoritmo: mergesort_melhorado2 (R) | Iterações: 100 | Tamanho: 10000 | Tempo: 1.882322 milisegundos.
Algoritmo: mergesort_melhorado2 (R) | Iterações: 100 | Tamanho: 100000 | Tempo: 22.596338 milisegundos.
Algoritmo: mergesort_melhorado2 (R) | Iterações: 100 | Tamanho: 1000000 | Tempo: 267.566848 milisegundos.
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