void quicksort_classico (int* vet, int p, int r) { if (p < r) { int q = particiona(vet, p, r); quicksort(vet, p, q-1); quicksort(vet, q + 1, r); } }
Arv* arv_reconstroi (Arv* arv, Fila* preordem, infotype *vetDFS, infotype inicio, infotype tamanho){ infotype pivo, x = 0; /* Enquanto houver elementos na fila do percorrimento preordem significa que ainda temos que percorrer a árvore e reconstrui-la */ while (!fila_vazia(preordem)){ x = fila_remove (preordem); arv = arv_insere (arv, x, arv); /* Encontramos o pivô do vetor DFS que representa a raiz da árvore */ pivo = particiona (preordem, vetDFS, inicio, tamanho, x); /* Constrói subárvore esquerda recursivamente com a raiz da árvore sendo a raiz da subárvore esquerda */ arv = arv_reconstroi (arv, preordem, vetDFS, inicio, pivo - 1); /* Constrói subárvore direita recursivamente com a raiz da árvore sendo a raiz da subárvore direita */ arv = arv_reconstroi (arv, preordem, vetDFS, pivo + 1, tamanho); } return arv; }
void quicksort(int *V, int a, int b) { if ( b <= a ) return; int meio = particiona(V, a, b); quicksort(V, a, meio - 1); quicksort(V, meio + 1, b); }
int particiona_aleatorio(int* vet, int p, int r) { int i = rand()%(r-p) + p; // printf("%d\n", i); int temp = vet[i]; vet[i] = vet[r]; vet[r] = temp; return particiona(vet, p, r); }