Commit 37eb7868 authored by Leonardo Krambeck's avatar Leonardo Krambeck

implementa quicksort com mediana de 5 com vetor

parent e1fcb7c9
......@@ -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 = 1000000;
char *algoritmo = "quicksort_mediana3 (R)";
int TAM_MAX = 100000;
char *algoritmo = "insertionsort (R)";
for ( tam=10; tam <= TAM_MAX; tam*=10 )
{
......@@ -36,7 +36,7 @@ int main () {
ini = timestamp();
/* Mude aqui o algoritmo usado */
quicksort_mediana3 (v,0,tam-1);
insertionsort (v,0,tam-1);
fim = timestamp();
soma_tempo += (fim-ini);
......
......@@ -244,6 +244,56 @@ void quicksort_mediana3 (int v[], int ini, int fim)
}
}
/* particiona com pivo da mediana de 3 */
int particiona_mediana5 (int v[], int ini, int fim, int pivo)
{
int i, j;
i = ini-1;
j = fim+1;
while (1)
{
do
i++;
while ( v[i] < pivo );
do
j--;
while ( v[j] > pivo );
if ( i >= j )
return j;
troca (v, i, j);
}
}
/* calcula a mediana de 3 entre v[ini], v[meio] e v[fim] usando vetor e insertion */
int mediana5_vetor (int v[], int ini, int fim)
{
int meio = ini + (fim-ini)/2;
int esq = ini + (meio-ini)/2;
int dir = meio + (fim-meio)/2;
int m[5] = {v[ini], v[esq], v[meio], v[dir], v[fim]};
insertionsort (m, 0, 4);
return m[2];
}
void quicksort_mediana5 (int v[], int ini, int fim)
{
if (ini < fim)
{
int pivo = mediana5_vetor (v, ini, fim);
int pivo_i = particiona_mediana5 (v, ini, fim, pivo);
quicksort_mediana5 (v, ini, pivo_i);
quicksort_mediana5 (v, pivo_i+1, fim);
}
}
void copia_vetor (int v[], int aux[], int ini, int fim)
{
int i, tam = fim-ini+1;
......
......@@ -9,5 +9,6 @@ void quicksort_inicio (int v[], int ini, int fim);
void quicksort_fim (int v[], int ini, int fim);
void quicksort_meio (int v[], int ini, int fim);
void quicksort_mediana3 (int v[], int ini, int fim);
void quicksort_mediana5 (int v[], int ini, int fim);
void mergesort_basico (int v[], int ini, int fim);
void mergesort_melhorado (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