1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ordenar um array

Discussão em 'Programação' iniciada por realtravolta, 19 de Abril de 2006. (Respostas: 16; Visualizações: 2185)

  1. realtravolta

    realtravolta Power Member

    boa tarde

    precisava de ajuda num pequeno projecto que tou a fazer para uma disciplina da FAC.
    começei este ano com a linguagem de programação vb.net

    tou a criar um array com 10 posiçoes
    onde em cada posição tem um nome proprio ex:"joão","maria", ...

    e queria ordenar por ordem alfabetica.

    já pesquisei bastante e já tentei o metodo array.sort mas nao me dá nada.

    obrigado
     
  2. Karakatoa

    Karakatoa Power Member

    Podes utilizar o método sort do Array com o auxilio de uma classe que implemente o interface IComparer.
    Ou seja:

    1º Crias uma classe que implemente o interface IComparer, que apenas tem um método. O método Compare. Nesse método fazes a comparação entre duas strings da forma que pretenderes. No teu caso alfabéticamente. Em alternativa a usares uma classe criada por ti podes utilizar a classe CaseInsensitiveComparer e verifica se obtens o resultado que pretendes.

    2º Invocas o método Sort do Array passando o array que queres ordenar e uma instancia de um IComparer (o teu ou o CaseInsensitiveComparer).

    Abraço
     
  3. SoundSurfer

    SoundSurfer Power Member

    Sintetizando:

    Array.Sort(o_teu_array, new CaseInsensitiveComparer());
     
  4. spastikman

    spastikman Banido

    podes implementar um algoritmo já usado como por exemplo o bubble sort ou shell sort ...
     
  5. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    não sei qual o algoritmo que o método Array.sort utiliza mas podes sempre implementar tu um algoritmo como o mergesort ou o quicksort (são provavelmente os algoritmos de ordenação mais eficientes)

    para conheceres os algoritmos e até implementações do código podes recorrer à wikipedia - http://pt.wikipedia.org
     
  6. DJ_PAPA

    DJ_PAPA Power Member

    Tb concordo.
    O que ele quer fazer é uma coisa tao simples que por vezes mais vale fazermos por nos proprios o nosso metodo do que andar á procura de algo que faça isso.
    Fica a ganhar em todos os sentidos. Treina, implementa o metodo, conhece melhor a linguagem, treina o raciocinio, etc etc
     
  7. SoundSurfer

    SoundSurfer Power Member

    Já agora, por curiosidade, o Array.Sort do .NET utiliza o QuickSort.
     
  8. realtravolta

    realtravolta Power Member

    desde já obrigado a todos pelas respostas

    eu já fiz um algoritmo de ordenação (buble sort) mas foi para numeros mas para letras não consigo (por isso pedi ajuda) já me disseram que tem a ver com o código ASCII.

    Module Ordena
    ' Ordena a lista
    Sub ordena(ByVal n As Integer, ByRef x() As String)
    Dim a As Integer
    Dim t As Integer
    Dim i As Integer
    Dim troca As Boolean
    Do
    troca = False
    For i = 1 To n - 1
    If x(i) < x(i + 1) Then
    troca = False
    Else
    troca = True
    t = x(i + 1)
    x(i + 1) = x(i)
    x(i) = t
    x(i) = t
    End If
    Next
    Loop Until troca = False
    ' XXX: preencher o código aqui
    End Sub
    Sub Main()
    ' Inicializa uma lista com 5 elementos
    Dim n As Integer
    n = 5
    Dim x(5) As String
    x(1) = 1
    x(2) = 4
    x(3) = 2
    x(4) = 5
    x(5) = 3

    ' Escreve a lista para a consola
    Dim i As integer
    Console.WriteLine("Lista antes de ordenar:")
    For i = 1 To n
    Console.WriteLine(x(i))
    Next
    ' Ordena
    ordena(n, x)
    ' Escreve a lista para a consola
    Console.WriteLine("Lista após ordenar:")
    For i = 1 To n
    Console.WriteLine(x(i))
    Next
    ' pausa
    Console.ReadLine()
    End Sub
    End Module


    a minha duvida é como posso por este algoritmo a fubcionar com letras e não numeros
    obrigado pela ajuda
     
  9. SoundSurfer

    SoundSurfer Power Member

    Podes usar. No sítio onde fazes a comparação dos números, usas o String.Compare , que até dá para ignorar se as letras sao maiúsculas ou minúsculas se quiseres.
     
  10. assim só por acaso n andas no istec? lol... :wow:

    podes usar para strings o mesmo metodo... aqui ta um exemplo com bubble sort..

    chamas a funcao com o vector e o tamanho do mesmo como argumentos e voila..

    Depois é so imprimir para o ecra o vector já ordenado..:)
     
    Última edição: 20 de Abril de 2006
  11. realtravolta

    realtravolta Power Member


    Fui apanhado.:-D lol

    Ng nasce ensinado acho eu....a perguntar tb se aprende.
    obrigado pela dica
    viva o istec:-D
     
  12. :) claro k ng nasce ensinado... mas inda bem ke fui util... se calhar até és da minha turma.. va-se lá saber... lol... fica bem
     
  13. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    esse algoritmo é um pouco ineficiente...
     
  14. [N]

    [N] Power Member

    O quick sorte é o mais eficiente até à data correcto?
     
  15. claro que é pouco eficiente.. eu proprio utilizei outro para este trabalho.. mas como ele é da minha turma não lhe ia fornecer um igual :p lol... o bubble sort já dá para desenrascar.. alem do mais ele tem de explicar o funcionamento dele, sendo então o mais apropriado...
     
  16. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    não necessariamente...

    o mergesort consegue sempre executar em tempo n*log(n).
    o quicksort anda entre n*log(n) e n*n.
    ou seja, tendo em conta o tempo de execução, o mergesort nunca é pior do que o quicksort.
    o mergesort tem o incoveniente de precisar de "memória auxiliar"

    temos muitos outros algoritmos de ordenação, mas outro que penso que vale a pena referir é o counting sort, que consegue ordenar um array de inteiros em tempo linear (mais também tem o incoveniente de precisar de memória auxiliar)...
     
  17. iznougud

    iznougud I quit My Job for Folding

    Tenta isto:

    Dim ola As New ArrayList
    ola.Add("teste")
    ola.Add("ola")
    ola.Add("Ola2")
    ola.Add("Ola")
    ola.Add("alfa")
    ola.Sort()
     

Partilhar esta Página