diff --git a/Arquivos/Quicksort_interativo.c b/Arquivos/Quicksort_interativo.c new file mode 100644 index 0000000000000000000000000000000000000000..442849dc99acd9e97ec9cb2f76a17b035e366bce --- /dev/null +++ b/Arquivos/Quicksort_interativo.c @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <stdlib.h> + +typedef struct EstruturaPilha{ + int Posicao; + struct EstruturaPilha *Prox; +} EstruturaPilha; + +typedef struct { + EstruturaPilha *Topo; +} TPilha; + +void InicPilha (TPilha *Pilha) { + Pilha->Topo = (EstruturaPilha*) malloc (sizeof(EstruturaPilha)); + Pilha->Topo->Prox = NULL; +} + +int VaziaPilha (TPilha *Pilha) { + return (Pilha->Topo->Prox == NULL); +} + +void Push (TPilha *Pilha,int elemento) { + EstruturaPilha *Aux; + + Aux = (EstruturaPilha*) malloc (sizeof (EstruturaPilha)); + Aux->Prox = Pilha->Topo; + Pilha->Topo->Posicao = elemento; + Pilha->Topo = Aux; +} + +void Pop (TPilha *Pilha, int *elemento) { + EstruturaPilha *Aux; + Aux = Pilha->Topo; + Pilha->Topo = Aux->Prox; + free (Aux); + *elemento = Pilha->Topo->Posicao; +} + +void QuickSort_Interativo (int *Vetor, int TAM) { + TPilha PilhaDireita, PilhaEsquerda; + int Esquerda, Direita, i, j; + + InicPilha (&PilhaDireita); + InicPilha (&PilhaEsquerda); + Esquerda = 0; + Direita = TAM - 1; + + Push (&PilhaDireita, Direita); + Push (&PilhaEsquerda, Esquerda); + + do { + if (Direita > Esquerda) { + //Particiona (Vetor, Esquerda, Direita, &i, &j); + Push (&PilhaDireita, j); + Push (&PilhaEsquerda, Esquerda); + Esquerda = i; + } else { + Pop (&PilhaDireita, &Direita); + Pop (&PilhaEsquerda, &Esquerda); + } + } while (!VaziaPilha (&PilhaDireita)); +} + +main() { + int n, TAM; +}