Você está na página 1de 204

ALGORITMOS E ESTRUTURAS

DE DADOS I

Métodos de ordenação - Quicksort

Baseado nos slides dos Profs. Michael Móra e Afonso Sales


Quicksort
void quicksort(int [] v, int low, int high) {
int pivot;
if ((high-low) > 0) {
pivot = partition(v, low, high);
quicksort(v, low, pivot-1);
quicksort(v, pivot+1, high);
}
v
}
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
int partition(int [] v, int low, int high) {
int i, p, firsthigh;
firsthigh = low;
p = high;
for (i=low; i<high; i++)
if (v[i] < v[p]) {
swap(v, i, firsthigh);
firsthigh = firsthigh + 1;
}
swap(v, p, firsthigh);
return firsthigh;
}

• Que função o algoritmo desempenha?


• Como funciona?
Quicksort (árvore de recursão)
quicksort(v, 0, 9)

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5 3
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = ?

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = ?

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5 8
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5 9
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = ?

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = ?

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = 0

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = 0

v
quicksort(v, 0, -1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = 0

v
quicksort(v, 0, -1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 20 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 2117 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 22 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2) quicksort(v, 4, 3)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 23 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2) quicksort(v, 4, 3)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 24 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3)
pivot = 3

quicksort(v, 0, 2) quicksort(v, 4, 3)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 25 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3

quicksort(v, 0, 2) quicksort(v, 4, 3)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = ?

quicksort(v, 0, 2) quicksort(v, 4, 3)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3)
pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4)


pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4)


pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = ?

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2)
pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 34 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = ?

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 35 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = 7

v
quicksort(v, 0, -1) quicksort(v, 1, 1) 0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 36 17 5
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5
quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)
pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6)


37
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6)


38
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


39
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


40
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


41
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7) quicksort(v, 9, 9)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


42
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7) quicksort(v, 9, 9)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


43
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7) quicksort(v, 9, 9)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


44
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7) quicksort(v, 9, 9)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


45
Quicksort (árvore de recursão)
quicksort(v, 0, 9)
pivot = 4

quicksort(v, 0, 3) quicksort(v, 5, 9)
pivot = 3 pivot = 5

v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

quicksort(v, 0, 2) quicksort(v, 4, 3) quicksort(v, 5, 4) quicksort(v, 6, 9)


pivot = 2 pivot = 8

quicksort(v, 0, 1) quicksort(v, 3, 2) quicksort(v, 6, 7) quicksort(v, 9, 9)


pivot = 0 pivot = 7

quicksort(v, 0, -1) quicksort(v, 1, 1) quicksort(v, 6, 6) quicksort(v, 8, 7)


46
47

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

Executa: quicksort(v, 0, 9)
48

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

Verifica: (9-0) > 0


49

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


50

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


51

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


52

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


53

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

6 1 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


54

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


55

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


56

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


57

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


58

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


59

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


60

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


61

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


62

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 6 12 40 1 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


63

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


64

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


65

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


66

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


67

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


68

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


69

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 12 40 6 29 2 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


70

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 40 6 29 12 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


71

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 40 6 29 12 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


72

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 40 6 29 12 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


73

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 40 6 29 12 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


74

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 40 6 29 12 3 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


75

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 6 29 12 40 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


76

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 6 29 12 40 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


77

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 6 29 12 40 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


78

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 6 29 12 40 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


79

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 6 29 12 40 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


80

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 6 29 12 40 17 5

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 9)


81

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p
i

Retorna: firsthigh = 4
Executa: pivot = partition(v, 0, 9)
82

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retornou: pivot = partition(v, 0, 9) = 4


83

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
84

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (3-0) > 0


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
85

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
86

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
87

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
88

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
89

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
90

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
91

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
92

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
93

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
94

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
95

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
96

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
97

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
98

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p
i

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
99

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p
i firsthigh

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
100

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

firsthigh

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
101

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

firsthigh

Executa: pivot = partition(v, 0, 3)


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
102

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

firsthigh

Retorna: firsthigh = 3
Executa: pivot = partition(v, 0, 3)
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
103

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retournou: pivot = partition(v, 0, 3) = 3


Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
104

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
105

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (2-0) > 0


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
106

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
107

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
108

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
109

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
110

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
111

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
112

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
113

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
114

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
115

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

i firsthigh

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
116

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

firsthigh

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
117

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

firsthigh

Executa: pivot = partition(v, 0, 2)


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
118

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
p

firsthigh

Retorna: firsthigh = 2
Executa: pivot = partition(v, 0, 2)
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
119

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retornou: pivot = partition(v, 0, 2) = 2


Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
120

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
121

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (1-0) > 0


Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
122

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 1)


Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
123

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 1)


Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
124

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 1)


Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
125

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 0, 1)


Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
126

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Retorna: firsthigh = 0
Executa: pivot = partition(v, 0, 1)
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
127

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retornou: pivot = partition(v, 0, 1) = 0


Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
128

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 0, -1)


Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
129

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (-1-0) > 0


Executa: quicksort(v, 0, -1)
Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
130

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Falhou! Apenas retorna recursão.


Verifica: (-1-0) > 0
Executa: quicksort(v, 0, -1)
Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
131

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 1, 1)
Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
132

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (1-1) > 0


Executa: quicksort(v, 1, 1)
Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
133

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Falhou! Apenas retorna recursão.


Verifica: (1-1) > 0
Executa: quicksort(v, 1, 1)
Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
134

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retorna recursão.
Retornou: pivot = partition(v, 0, 1) = 0
Executa: quicksort(v, 0, 1)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
135

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 3, 2)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
136

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (2-3) > 0


Executa: quicksort(v, 3, 2)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
137

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Falhou! Apenas retorna recursão.


Verifica: (2-3) > 0
Executa: quicksort(v, 3, 2)
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
138

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retorna recursão.
Retornou: pivot = partition(v, 0, 2) = 2
Executa: quicksort(v, 0, 2)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
139

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 4, 3)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
140

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (3-4) > 0


Executa: quicksort(v, 4, 3)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
141

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Falhou! Apenas retorna recursão.


Verifica: (3-4) > 0
Executa: quicksort(v, 4, 3)
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
142

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Retorna recursão.
Retournou: pivot = partition(v, 0, 3) = 3
Executa: quicksort(v, 0, 3)
Retornou: pivot = partition(v, 0, 9) = 4
143

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
144

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

Verifica: (9-5) > 0


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
145

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
146

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
147

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
148

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
149

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
150

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
151

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
152

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
153

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
154

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 29 12 40 17 6

low high
firsthigh p

Executa: pivot = partition(v, 5, 9)


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
155

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Retorna: firsthigh = 5
Executa: pivot = partition(v, 5, 9)
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
156

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

Retornou: pivot = partition(v, 5, 9) = 5


Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
157

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

Executa: quicksort(v, 5, 4)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
158

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

Verifica: (4-5) > 0


Executa: quicksort(v, 5, 4)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
159

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

Falhou! Apenas retorna recursão.


Verifica: (4-5) > 0
Executa: quicksort(v, 5, 4)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
160

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
161

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

Verifica: (9-6) > 0


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
162

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
163

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
164

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
165

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
166

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
167

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
168

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
169

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
170

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
171

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 40 17 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
172

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 40 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
173

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 40 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
174

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 40 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
175

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 40 29

low high
firsthigh p

Executa: pivot = partition(v, 6, 9)


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
176

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
firsthigh p

Retorna: firsthigh = 8
Executa: pivot = partition(v, 6, 9)
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
177

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retornou: pivot = partition(v, 6, 9) = 8


Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
178

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
179

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Verifica: (7-6) > 0


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
180

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
firsthigh p

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
181

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
firsthigh p

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
182

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
firsthigh p

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
183

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
firsthigh p

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
184

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
p

i firsthigh

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
185

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
p

firsthigh

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
186

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
p

firsthigh

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
187

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

low high
p

firsthigh

Retorna: firsthigh = 7 i

Executa: pivot = partition(v, 6, 7)


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
188

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retornou: pivot = partition(v, 6, 7) = 7


Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
189

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Executa: quicksort(v, 6, 6)
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
190

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Verifica: (6-6) > 0


Executa: quicksort(v, 6, 6)
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
191

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Falhou! Apenas retorna recursão.


Verifica: (6-6) > 0
Executa: quicksort(v, 6, 6)
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
192

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Executa: quicksort(v, 8, 7)
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
193

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Verifica: (7-8) > 0


Executa: quicksort(v, 8, 7)
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
194

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Falhou! Apenas retorna recursão.


Verifica: (7-8) > 0
Executa: quicksort(v, 8, 7)
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
195

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retorna recursão.
Retornou: pivot = partition(v, 6, 7) = 7
Executa: quicksort(v, 6, 7)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
196

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Executa: quicksort(v, 9, 9)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
197

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Verifica: (9-9) > 0


Executa: quicksort(v, 9, 9)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
198

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Falhou! Apenas retorna recursão.


Verifica: (9-9) > 0
Executa: quicksort(v, 9, 9)
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
199

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retorna recursão.
Retornou: pivot = partition(v, 6, 9) = 8
Executa: quicksort(v, 6, 9)
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
200

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retorna recursão.
Retornou: pivot = partition(v, 5, 9) = 5
Executa: quicksort(v, 5, 9)
Retornou: pivot = partition(v, 0, 9) = 4
201

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retorna recursão.
Retornou: pivot = partition(v, 0, 9) = 4
202

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Retornou para chamada inicial:


quicksort(v, 0, 9)
203

Quicksort (passo a passo)


v
0 1 2 3 4 5 6 7 8 9

1 1 2 3 5 6 12 17 29 40

Vetor está ordenado!!!


Quicksort
• Qual é a complexidade do algoritmo?
• Qual é o O()?
• No pior caso (vetor já ordenado): o particionamente é feito
de maneira que se tem um subproblema com n-1
elementos e outro com 0 elementos, ou seja, o pivô é o
primeiro ou último elemento, sendo então o algoritmo O(n2).
• No melhor caso: o particionamento é “comportado” e os
subproblemas tem sempre n/2 elementos, sendo então o
algoritmo O(n × log n).
• No caso médio (normalmente o que acontece): o
particionamento ora é bom ora é ruim, mas na média dada
a aleatoriedade dos elementos no vetor, algoritmo tem
complexidade igual a O(n × log n).

Você também pode gostar