From 78944ef7180ad15b4c978b13152115a2a2f94127 Mon Sep 17 00:00:00 2001 From: Fernando Erd <fce15@inf.ufpr.br> Date: Fri, 11 Dec 2015 10:06:01 -0200 Subject: [PATCH] =?UTF-8?q?Arquivo=20Ordena=C3=A7=C3=A3o.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Arquivos/Ordena\303\247\303\243o.c" | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git "a/Arquivos/Ordena\303\247\303\243o.c" "b/Arquivos/Ordena\303\247\303\243o.c" index 0b9fca8..ea87549 100644 --- "a/Arquivos/Ordena\303\247\303\243o.c" +++ "b/Arquivos/Ordena\303\247\303\243o.c" @@ -37,3 +37,58 @@ void BubbleSort (int *Vetor) { } } } + +int Particao (int Vetor[], int Esquerda, int Direita) { + int Pivo, i, j; + + Pivo = Vetor[Direita]; + i = (Esquerda - 1); + for (j = Esquerda; j <= Direita- 1; j++) + { + if (Vetor[j] <= Pivo) + { + i++; + Troca (Vetor, i, j); + } + } + Troca (Vetor,i + 1, Direita); + return (i+1); +} + +void QuickSortRecursivo (int Vetor[], int Esquerda, int Direita) { + int pospivo; + if (Esquerda < Direita) { + pospivo = Particao(Vetor, Esquerda, Direita); + QuickSortRecursivo(Vetor,Esquerda,pospivo-1); + QuickSortRecursivo(Vetor,pospivo+1,Direita); + } +} +void QuickSortIterativo (int Vetor[], int Esquerda, int Direita) { + int Posicao; + int Pilha[ Direita - Esquerda + 1 ]; + int top; + + top = -1; + Pilha[ ++top ] = Esquerda; + Pilha[ ++top ] = Direita; + + while ( top >= 0 ) + { + Direita = Pilha[ top-- ]; + Esquerda = Pilha[ top-- ]; + + Posicao = Particao( Vetor, Esquerda, Direita ); + + if ( Posicao-1 > Esquerda ) + { + Pilha[ ++top ] = Esquerda; + Pilha[ ++top ] = Posicao - 1; + } + + if ( Posicao+1 < Direita ) + { + Pilha[ ++top ] = Posicao + 1; + Pilha[ ++top ] = Direita; + } + } +} -- GitLab