[Prévia cron] [Próxima Cron] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
[Índice de autor]
erro?
- Subject: erro?
- From: Ronerto José Giordano Barra <giord@uol.com.br>
- Date: Tue, 07 Sep 1999 15:40:12 -0300
Estava lendo as notas de aula do prof. Paulo Feofiloff sobre
Quicksort, quando me deparei com essa função no exercçio número 2:
#define troca(X, Y) { int t = X; X = Y; Y = t; }
int particione (int a[], int l, int r) {
int v = a[r], i = l, j = r-1;
while (i <= j) {
if (a[i] < c) ++i; /* aqui eu ahco que é v e
não c */
else if (v < a[j]) --j;
else {
troca (a[i], a[j]);
++i; --j;
}
}
// agora i == j+1
troca (a[i], a[r]);
return i;
}
Eu li esse trecho de código e não concordei com o comentário
que o prof. fez: // agora i == j+1.
Olha só porque eu acho isso: se por um momento i == j, o programa vai
rodar o corpo do laço while. E se além de i == j tivermos que a[i] == v,
vamos ter que os dois if aninhados serão falsos ( v < v no primeiro e v
< v no segundo ) e então o corpo do else do segundo if irá rodar. Após o
fim dessa iteração do while, i == j +2, portanto o programa deixa o
while pra trás e chega no ponto onde o comentário foi feito com valores
de i e j diferentes do que o comentário afirma.
Será que o que pensei tem está certo ou eu perdi alguma coisa?
Desculpe se ficou meio confusa minha explicação.
- Follow-Ups:
- RE: erro?
- From: Paulo Feofiloff <pf@ime.usp.br>
- RE: erro?
- From: Paulo Feofiloff <pf@ime.usp.br>