diff --git "a/Arquivos/Ordena\303\247\303\243o.c" "b/Arquivos/Ordena\303\247\303\243o.c" index 0b9fca8ee4c49f83a3b5f37507a1d7e781ded504..ea8754900cc2725968071b8162ebadb2560b69b3 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; + } + } +}