Jump to content
Sign in to follow this  
Sam185

Problema em ordenar

Recommended Posts

Sam185

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é

Share this post


Link to post
Share on other sites
Caça

O mais fácil é fazeres uma consulta Linq ao vector


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

C# não é o meu forte.

Em vb seria algo deste tipo

Dim Linq = (From O As Integer In num Order By O Ascending Select O).ToArray()


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Espera que alguém que perceba mais de C# do que eu apareça e te responda :)


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
softklin

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.

Share this post


Link to post
Share on other sites
Betovsky

Linq em C# seria:

var nums_ordenados = nums.OrderBy(i => i).ToArray();


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
simonoop

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...

Share this post


Link to post
Share on other sites
Sam185

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é

Share this post


Link to post
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
Sign in to follow this  

×
×
  • 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.