ordenar um array

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
 
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
 
Karakatoa disse:
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

Sintetizando:

Array.Sort(o_teu_array, new CaseInsensitiveComparer());
 
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
 
Rui_Carlos disse:
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

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
 
Rui_Carlos disse:
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

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

Module Vector

Sub Main()
Dim i As Integer
Dim vector(5) As String

vector(0) = "a"
vector(1) = "s"
vector(2) = "d"
vector(3) = "f"
vector(4) = "g"

ordenarvector(vector, 5)

For i = 0 To 5
Console.Write(vector(i) & " ")
Next
Console.ReadLine()
End Sub

Public Sub ordenarvector(ByVal vector() As String, ByVal tamvector As Integer)
Dim i, j As Integer
Dim temp As String

For i = 0 To tamvector
For j = 0 To tamvector - 1
If vector(j) > vector(j + 1) Then
temp = vector(j)
vector(j) = vector(j + 1)
vector(j + 1) = temp
End If
Next
Next
End Sub

End Module

Depois é so imprimir para o ecra o vector já ordenado..:)
 
Última edição:
ciberpunk disse:
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..:)


Fui apanhado.:-D lol

Ng nasce ensinado acho eu....a perguntar tb se aprende.
obrigado pela dica
viva o istec:-D
 
realtravolta disse:
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.
...
esse algoritmo é um pouco ineficiente...
 
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...
 
[N] disse:
O quick sorte é o mais eficiente até à data correcto?
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)...
 
Tenta isto:

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