Função parImpar recebe um inteiro n e um vetor v[0..n-1] de inteiros e retorna um índice k e rearranja o vetor v de modo que todos os números em v[0..k-1] são ímpares e todos os números em v[k..n-1] são pares. O consumo de tempo é O( n) e o espaço extra é O(1).
void
parImpar(int n, int v[])
{
/* espaco extra 3 x sizeof(int) == 12(?) bytes = O(1) */
int i;
int k;
int t;
k = 0;
for (i = 0; /* A */ i < n; i++)
{
if (v[i] % 2 == 0)
{
t = v[k];
v[k] = v[i];
v[i] = t;
k += 1;
}
}
return k;
}
Em /* A */ vale que
números em v[0..k-1] são ímpares e
números em v[k..i-1] são pares
No início da última iteração i == n e a correção é evidente.