Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Q
QuickSort e MergeSort - Algoritmos 2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Leonardo Krambeck
QuickSort e MergeSort - Algoritmos 2
Commits
c0f36f0e
Commit
c0f36f0e
authored
Oct 16, 2019
by
Leonardo Krambeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implementa merge com todas melhoras e hibrido, reorganiza os logs
parent
6771714f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
47 deletions
+43
-47
analise.c
analise.c
+1
-5
lib_ordena.c
lib_ordena.c
+36
-29
logs/insertion_comparison.log
logs/insertion_comparison.log
+0
-0
logs/quick_vs_merge.log
logs/quick_vs_merge.log
+6
-13
No files found.
analise.c
View file @
c0f36f0e
...
...
@@ -18,7 +18,7 @@ int main () {
/* Mude aqui o numero de iterações, tamanho maximo e nome do algoritmo */
int
MAX_IT
=
100
;
int
TAM_MAX
=
1000000
;
char
*
algoritmo
=
"mergesort_melhorado
2
(R)"
;
char
*
algoritmo
=
"mergesort_melhorado (R)"
;
for
(
tam
=
10
;
tam
<=
TAM_MAX
;
tam
*=
10
)
{
...
...
@@ -31,9 +31,6 @@ int main () {
soma_tempo
=
0
;
for
(
i
=
0
;
i
<
MAX_IT
;
i
++
)
{
/*printf ("\n");
imprime_vetor (v, tam);*/
ini
=
timestamp
();
/* Mude aqui o algoritmo usado */
mergesort_melhorado
(
v
,
0
,
tam
-
1
);
...
...
@@ -41,7 +38,6 @@ int main () {
soma_tempo
+=
(
fim
-
ini
);
/*imprime_vetor (v, tam);*/
embaralha_vetor
(
v
,
tam
);
}
...
...
lib_ordena.c
View file @
c0f36f0e
...
...
@@ -4,6 +4,8 @@
#include "lib_ordena.h"
#define LIMITE_INSERTION 50
void
imprime_vetor
(
int
v
[],
int
tam
)
{
int
i
;
...
...
@@ -269,7 +271,7 @@ int particiona_mediana5 (int v[], int ini, int fim, int pivo)
}
}
/* calcula a mediana de
3 entre v[ini], v[meio] e v[fim]
usando vetor e insertion */
/* calcula a mediana de
5
usando vetor e insertion */
int
mediana5_vetor
(
int
v
[],
int
ini
,
int
fim
)
{
/* achar uma implementação mais eficiente */
...
...
@@ -306,17 +308,6 @@ 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
)
{
...
...
@@ -378,17 +369,20 @@ void mergesort_basico (int v[], int ini, int fim)
}
}
/* intercala com melhorias */
void
intercala_melhorado
(
int
v
[],
int
ini
,
int
meio
,
int
fim
)
void
copia_vetor_melhorado
(
int
v
[],
int
aux
[],
int
ini
,
int
fim
)
{
/* implementar passar o vetor por parametro */
int
tam_aux
=
fim
-
ini
+
1
;
int
aux
[
tam_aux
];
for
(
ini
=
ini
;
ini
<=
fim
;
ini
++
)
v
[
ini
]
=
aux
[
ini
];
}
/* intercala com melhorias */
void
intercala_melhorado
(
int
v
[],
int
aux
[],
int
ini
,
int
meio
,
int
fim
)
{
/* indices do vetor v */
int
i
=
ini
;
int
j
=
meio
+
1
;
int
k
=
0
;
/* indice do vetor aux */
int
k
=
ini
;
/* intercala entre as duas seções do vetor aux */
while
(
(
i
<=
meio
)
&&
(
j
<=
fim
)
)
...
...
@@ -423,30 +417,43 @@ void intercala_melhorado (int v[], int ini, int meio, int fim)
k
++
;
}
copia_vetor
2
(
v
,
aux
,
ini
,
fim
);
copia_vetor
_melhorado
(
v
,
aux
,
ini
,
fim
);
}
/* testa se duas particoes do merge já estao ordenadas */
int
esta_ordenado
(
int
v
[],
int
meio
)
int
esta_ordenado
(
int
v
[],
int
aux
[],
int
meio
)
{
if
(
v
[
meio
]
<
v
[
meio
+
1
]
)
if
(
v
[
meio
]
<
aux
[
meio
+
1
]
)
return
1
;
return
0
;
}
/* mergesort com melhorias */
void
mergesort_melhorado
(
int
v
[],
int
ini
,
int
fim
)
void
mergesort_melhorado
_com_aux
(
int
v
[],
int
aux
[],
int
ini
,
int
fim
)
{
/* evita overflow */
int
meio
=
ini
+
(
fim
-
ini
)
/
2
;
if
(
ini
<
fim
)
if
(
ini
+
LIMITE_INSERTION
>
fim
)
insertionsort
(
v
,
ini
,
fim
);
else
{
/* implementar intercalar o aux e o v */
mergesort_melhorado
(
v
,
ini
,
meio
);
mergesort_melhorado
(
v
,
meio
+
1
,
fim
);
if
(
!
esta_ordenado
(
v
,
meio
))
intercala_melhorado
(
v
,
ini
,
meio
,
fim
);
mergesort_melhorado_com_aux
(
v
,
aux
,
ini
,
meio
);
mergesort_melhorado_com_aux
(
aux
,
v
,
meio
+
1
,
fim
);
if
(
!
esta_ordenado
(
v
,
aux
,
meio
))
intercala_melhorado
(
v
,
aux
,
ini
,
meio
,
fim
);
}
}
void
mergesort_melhorado
(
int
v
[],
int
ini
,
int
fim
)
{
int
*
aux
;
aux
=
(
int
*
)
malloc
((
fim
+
1
)
*
sizeof
(
int
));
copia_vetor
(
v
,
aux
,
ini
,
fim
);
mergesort_melhorado_com_aux
(
v
,
aux
,
ini
,
fim
);
free
(
aux
);
}
insertion_comparison.log
→
logs/
insertion_comparison.log
View file @
c0f36f0e
File moved
quick_vs_merge.log
→
logs/
quick_vs_merge.log
View file @
c0f36f0e
...
...
@@ -31,17 +31,10 @@ Algoritmo: quicksort_mediana3 (R) | Iterações: 100 | Tamanho: 10000
Algoritmo: quicksort_mediana3 (R) | Iterações: 100 | Tamanho: 100000 | Tempo: 18.152781 milisegundos.
Algoritmo: quicksort_mediana3 (R) | Iterações: 100 | Tamanho: 1000000 | Tempo: 209.309841 milisegundos.
Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 10 | Tempo: 0.002588 milisegundos.
Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 100 | Tempo: 0.016948 milisegundos.
Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 1000 | Tempo: 0.168647 milisegundos.
Algoritmo: mergesort_melhorado1 (R) | Iterações: 100 | Tamanho: 10000 | Tempo: 1.963350 milisegundos.
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.
Algoritmo: mergesort_melhorado (R) | Iterações: 100 | Tamanho: 10 | Tempo: 0.001213 milisegundos.
Algoritmo: mergesort_melhorado (R) | Iterações: 100 | Tamanho: 100 | Tempo: 0.024856 milisegundos.
Algoritmo: mergesort_melhorado (R) | Iterações: 100 | Tamanho: 1000 | Tempo: 0.066545 milisegundos.
Algoritmo: mergesort_melhorado (R) | Iterações: 100 | Tamanho: 10000 | Tempo: 0.615146 milisegundos.
Algoritmo: mergesort_melhorado (R) | Iterações: 100 | Tamanho: 100000 | Tempo: 8.090613 milisegundos.
Algoritmo: mergesort_melhorado (R) | Iterações: 100 | Tamanho: 1000000 | Tempo: 114.690315 milisegundos.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment