You are on page 1of 3

Ordenao rpida (Quicksort)

Baseia-se num princpio muito simples que, quando aplicado recursivamente, acaba por ordenar o vector. Este princpio composto por 2 passos essenciais: 1. Escolher um elemento do vector, o pivot (por ex., V[0]); 2. Dividir o vector em 2 partes (esquerda e direita), em que: Parte esquerda com os elementos menores do que o pivot; Parte direita com os elementos maiores do que o pivot. Ao ser aplicado succesivamente este princpio a ambas as partes, quando o processo recursivo terminar o vector est ordenado. int v[]={ 7, 12, 1, -2, 0, 15, 4, 11, 9, 3}; int determinapivo(int inicio,int fim) { int i=0 ,k=inicio; for(i=inicio+1;i<=fim;i++) if(v[i]<v[inicio]) { k++; troca(&v[i],&v[k]); } troca(&v[inicio],&v[k]); printf("\n devolve pivo=%d",v[k]); return k; } int main() { int p=determinapivo(0,9); printf(\n pivo=%d,p); }

Faa o rastreamento deste vetor, e verificar se houve trocas ou no?

K=0; If(v[1]<v[0]) 7 12 0 1 Houve Troca( 7 12 0 1

1 -2 0 2 3 4 ) ou no houve troca( 1 -2 0 2 3 4

15 4 5 6 x ) k=__0____ 15 4 5 6

11 7 11 7

9 8 9 8

3 9 3 9

If(v[2]<v[0]) 7 12 1 -2 0 15 4 0 1 2 3 4 5 6 Houve Troca( ) ou no houve troca( ) k=______ 0 1 2 3 4 5 6

11 7

9 8

3 9

If(v[3]<v[0]) 0 1 2 3 4 5 6 Houve Troca(x ) ou no houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

If(v[4]<v[0]) 0 1 2 3 4 5 6 Houve Troca( ) ou no houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

If(v[5]<v[0]) 0 1 2 3 4 5 6 Houve Troca( ) ou no houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

If(v[6]<v[0]) 0 1 2 3 4 5 6 Houve Troca( ) ou nao houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

If(v[7]<v[0]) 0 1 2 3 4 5 6 Houve Troca( ) ou nao houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

If(v[8]<v[0]) 0 1 2 3 4 5 6 Houve Troca( ) ou nao houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

If(v[9]<v[0]) 0 1 2 3 4 5 6 Houve Troca( ) ou nao houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

troca(&v[inicio],&v[k]); 0 1 2 3 4 5 6 Houve Troca( ) ou nao houve troca( ) k=______ 0 1 2 3 4 5 6 7 8 9

You might also like