Commit 9b7d0d09 authored by Leonardo Krambeck's avatar Leonardo Krambeck

implementa mergesort basico

parent f3f8f4ae
......@@ -5,7 +5,7 @@
#include "lib_ordena.h"
#define MAX_IT 5
#define TAM_VETOR 8
#define TAM_VETOR 50
double timestamp(void)
{
......@@ -30,7 +30,7 @@ int main () {
imprime_vetor (v, tam);
ini = timestamp();
quicksort_meio (v,0,tam-1);
mergesort_basico (v,0,tam-1);
fim = timestamp();
soma_tempo += (fim-ini);
......
......@@ -155,11 +155,76 @@ void quicksort_meio (int v[], int ini, int fim)
quicksort_meio (v, pivo_i+1, fim);
}
}
void intercala (int v[], int ini, int meio, int fim) {
printf("implementar intercala\n");
void copia_vetor (int v[], int aux[], int ini, int fim)
{
int i, tam = fim-ini+1;
for ( i=0; i < tam; i++ )
{
aux[i] = v[ini];
ini++;
}
}
/* intercala sem melhorias */
void intercala_basico (int v[], int ini, int meio, int fim)
{
int tam_esq = meio - ini + 1;
int tam_dir = fim - meio;
int esquerdo[tam_esq], direito[tam_dir];
copia_vetor (v, esquerdo, ini, meio);
copia_vetor (v, direito, meio+1, fim);
int i = 0;
int j = 0;
/* intercala entre os dois vetores auxiliares */
while ( (i < tam_esq) && (j < tam_dir) )
{
if ( esquerdo[i] < direito[j] )
{
v[ini] = esquerdo[i];
i++;
}
else
{
v[ini] = direito[j];
j++;
}
ini++;
}
/* copia o restante do vetor que ainda houver elementos */
while (i < tam_esq)
{
v[ini] = esquerdo[i];
i++;
ini++;
}
while (j < tam_dir)
{
v[ini] = direito[j];
j++;
ini++;
}
}
void mergesort (int v[], int ini, int fim) {
printf("implementar mergesort\n");
/* mergesort sem melhorias */
void mergesort_basico (int v[], int ini, int fim)
{
/* evita overflow */
int meio = ini + (fim - ini)/2;
if ( ini < fim )
{
mergesort_basico (v, ini, meio);
mergesort_basico (v, meio+1, fim);
intercala_basico (v, ini, meio, fim);
}
}
......@@ -12,5 +12,6 @@ int particiona_fim (int v[], int ini, int fim);
void quicksort_fim (int v[], int ini, int fim);
int particiona_meio (int v[], int ini, int fim);
void quicksort_meio (int v[], int ini, int fim);
void copia_vetor (int v[], int aux[], int ini, int fim);
void intercala (int v[], int ini, int meio, int fim);
void mergesort (int v[], int ini, int fim);
void mergesort_basico (int v[], int ini, int fim);
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