Duvida de ordenação

14 views
Skip to first unread message

José Augusto

unread,
May 29, 2020, 3:33:47 PM5/29/20
to Lua BR
vetor = {12,3,14,16,7,4,2,18}
i = 0
j = #vetor

while(i<=j) do

if(vetor[i] > vetor[j]) then
aux = vetor[j]
vetor[j] = vetor[i]
vetor[i] = aux
elseif(vetor[j] < vetor[i]) then
aux = vetor[i]
vetor[i] = vetor[j]
vetor[j] = vetor[i]
end


end

for j=1,8 do
print(vetor[i])

end




lua: teste.lua:7: attempt to compare number with nil



pq fica dando esse erro???

Luiz Henrique de Figueiredo

unread,
May 29, 2020, 3:43:21 PM5/29/20
to lua...@googlegroups.com
On Fri, May 29, 2020 at 4:33 PM José Augusto
<augustore...@gmail.com> wrote:
>
> vetor = {12,3,14,16,7,4,2,18}
> i = 0
...
> if(vetor[i] > vetor[j]) then

Os arrays em Lua começam de 1, não de 0.

Tomás Guisasola

unread,
May 29, 2020, 5:01:55 PM5/29/20
to lua...@googlegroups.com
Oi José

Além do que o Luiz falou, vale a pena você olhar com cuidado o seu
algoritmo, porque ele tem alguns probleminhas. No loop while() você
não altera os valores de i nem de j, então vai ser um loop infinito.
E no corpo desse loop você faz duas vezes o mesmo teste (se vetor[i] >
vetor[j] e se vetor[j] < vetor[i]).

Sugiro você usar a construção for mesmo para fazer a ordenação
(supondo que você não quer usar table.sort para isso) e outra dica
seria escrever:

vetor[i], vetor[j] = vetor[j], vetor[i]

Isso vai trocar os dois valores sem precisar de uma variável auxiliar ;-)

Abraços,
Tomás

Em sex., 29 de mai. de 2020 às 16:43, Luiz Henrique de Figueiredo
<l...@tecgraf.puc-rio.br> escreveu:
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
> Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para lua-br+un...@googlegroups.com.
> Para ver esta discussão na web, acesse https://groups.google.com/d/msgid/lua-br/CAD55k3qqR2rUN%3DFqnmp9jmTpaTCbb_FQeUD_0s3MsM4Gfp_uvw%40mail.gmail.com.

José Augusto

unread,
May 29, 2020, 6:27:25 PM5/29/20
to lua...@googlegroups.com
Muito obrigado, agradeço de coração a todos vocês.


Reply all
Reply to author
Forward
0 new messages