Jump to content

Problema em ordenar


Sam185
 Share

Recommended Posts

Tenho um programa onde preciso ordenar os valores que estao dentro de um vector por ordem crescente, mas o codigo nao faz o que pretendo.  🙂

O vector tem 5 casas num[0] .. num[4].

Alguem me poderia dizer onde estou a errar?

for (int i2 = 4; i2 == 1; i2--)
    for (int i = 0; i == 4; i++)
    {
         if (num[i] > num[i + 1])
         {
             x = num[i + 1];
             num[i + 1] = num[i];
             num[i] = x;
          }
    }

Samuel Tomé

Link to comment
Share on other sites

A lógica interior do ciclo está correcta. Nesse algoritmo, deves percorrer o array todo, com o ciclo for exterior, e num ciclo interior, verificar a posição actual, e se a seguinte tem algum número inferior: se tiver, vamos "empurrando" o número para trás, não esquecendo de o comparar com os números anteriores.

Vê este artigo:

http://pt.wikipedia.org/wiki/Bubble_sort

Tens o algoritmo em pseudocódigo, se quiseres tentar fazer sozinho, ou uma implementação já feita em C#, também nessa página.

Se estiveres interessado em mais algoritmos de ordenação, também podes ver aqui:

http://pt.wikipedia.org/wiki/Ordena%C3%A7%C3%A3o_de_vector#M.C3.A9todos_simples

Eu não sei trabalhar com LINQ, mas também existe no C#, e é uma possibilidade, a sintaxe não deve fugir muito ao que o Caça te mostrou.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Há qualquer coisa de estranho no teu código. Para que serve o i2?

Proponho-te uma simples implementação de bubblesort.

neste caso seria qualquer coisa como:

            for (int i = 0; i <= 4; i++)
            {
                for (int i2 = i; i2 <= 4; i2++)
                {
                    if (num[i] > num[i2])
                    {
                        int x = num[i];
                        num[i] = num[i2];
                        num[i2] = x;
                    }
                }
            }

Isto é um exercício académico... funciona mas...

Link to comment
Share on other sites

Bem desde já agradeço as respostas ao tópico, realmente a solução do simonoop funciona, mas o que não me esta a cair bem é o facto do código que eu postei fazer o que pretendo em pascal e não fazer em C#.

O código que estava no link que o softclean postou também funcionou, obrigado por isso, já o do Betovsky não consegui colocar a funcionar com as devidas alterações.

Agradeço a todos, e o tópico esta resolvido...

Samuel Tomé

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.