From 141e62ee461864d1987d03e437a6fcd74c174c92 Mon Sep 17 00:00:00 2001 From: fce15 <fce15@inf.ufpr.br> Date: Fri, 11 Dec 2015 02:01:07 -0200 Subject: [PATCH] Bug Mediana --- Arquivos/QuickSort.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/Arquivos/QuickSort.c b/Arquivos/QuickSort.c index ce74cda..95d8526 100644 --- a/Arquivos/QuickSort.c +++ b/Arquivos/QuickSort.c @@ -1,13 +1,30 @@ #include <stdio.h> -void Troca ( int* a, int* b ) { - int t = *a; - *a = *b; - *b = t; +void Troca (int *Vetor, int i, int j) { + int aux; + + aux = Vetor[i]; + Vetor [i] = Vetor[j]; + Vetor [j] = aux; } - + +void printVetor( int Vetor[], int n ) { + int i; + for ( i = 0; i < n; ++i ) + printf( "%d ", Vetor[i] ); + printf ("\n"); +} +int Mediana (int Esquerda, int Meio, int Direita) { + if ((Esquerda >= Direita && Esquerda <= Meio) || (Esquerda >= Meio && Esquerda <= Direita)) + return Esquerda; + if (( Direita >= Esquerda && Direita <= Meio) || (Direita >= Meio && Direita <= Esquerda)) + return Direita; + else + return Meio; +} + int Particao (int Vetor[], int Esquerda, int Direita) { - int Pivo = Vetor[Direita]; + int Pivo = Mediana (Vetor[Esquerda], Vetor[Esquerda+Direita/2+1], Vetor[Direita]); int i = (Esquerda - 1); for (int j = Esquerda; j <= Direita- 1; j++) @@ -15,11 +32,12 @@ int Particao (int Vetor[], int Esquerda, int Direita) { if (Vetor[j] <= Pivo) { i++; - Troca (&Vetor[i], &Vetor[j]); + Troca (Vetor, i, j); } } - Troca (&Vetor[i + 1], &Vetor[Direita]); - return (i + 1); + Troca (Vetor,i + 1, Direita); + printVetor (Vetor, 8); + return (i+1); } void QuickSortRecursivo (int Vetor[], int Esquerda, int Direita) { @@ -59,14 +77,9 @@ void QuickSortIterativo (int Vetor[], int Esquerda, int Direita) { } } } -void printVetor( int Vetor[], int n ) { - int i; - for ( i = 0; i < n; ++i ) - printf( "%d ", Vetor[i] ); -} int main() { - int Vetor[] = {4, 3, 5, 2, 1, 3, 2, 3}; + int Vetor[] = {51, 2, 45, 95, 43, 78, 12, 32}; int n = sizeof( Vetor ) / sizeof( *Vetor ); QuickSortRecursivo( Vetor, 0, n - 1 ); printVetor( Vetor, n ); -- GitLab