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.