Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
[Ajuda c#] Ordenar listapessoas com metodo de ordenacao
03-01-2010, 16:22
Mensagem: #1
[Ajuda c#] Ordenar listapessoas com metodo de ordenacao
Boa Tarde

Se alguem me poderia ajudar a criar um método geral de ordenação para uma lista.

No meu caso é uma lista de pessoas mas se alguém me pudesse ajudar com um caso geral para nomes apenas eu depois adaptaria ao que necessito.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
03-01-2010, 16:40
Mensagem: #2
RE: [Ajuda c#] Ordenar listapessoas com metodo de ordenacao
Mas o C# nãi tem já um método geral de ordenação?

Se colocares os nomes (strings) dentro de um Array chamado "a", podes fazer o seguinte:

Array.Sort(a);

E todos os nomes serão ordenados alfabeticamente.

Mais informação aqui: http://dotnetperls.com/sorting-string-array

[Imagem: pplware_admin.png]
Os meus artigos | O meu site
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
03-01-2010, 16:44
Mensagem: #3
RE: [Ajuda c#] Ordenar listapessoas com metodo de ordenacao
pois eu sei disso e sei da existência do sort mas o meu professor pede expressamente um método ordenação do tipo "Bubble Sort", "Quick Sort" ou " Shell Sort"
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
03-01-2010, 23:28 (Esta mensagem foi modificada pela última vez a: 03-01-2010 23:31 por aucrun.)
Mensagem: #4
RE: [Ajuda c#] Ordenar listapessoas com metodo de ordenacao
Não tenho neste momento PC onde possa testar isto e confirmar que é isto que pretendes, mas vê lá se este post te consegue ajudar:
http://www.linhadecodigo.com.br/ArtigoIm...spx?id=557
Ou este:
http://www.csharp411.com/c-stable-sort/
Ou isto:
http://www.eggheadcafe.com/community/asp...ort-t.aspx
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
04-01-2010, 12:21
Mensagem: #5
RE: [Ajuda c#] Ordenar listapessoas com metodo de ordenacao
Se tiveres mesmo de implementar o teu algoritmo, podes ver na wikipédia alguns exemplos muito ilustrativos, e até exemplos em determinadas linguagens:

http://en.wikipedia.org/wiki/Bubble_sort
http://en.wikipedia.org/wiki/Insertion_sort
http://en.wikipedia.org/wiki/Selection_sort
http://en.wikipedia.org/wiki/Quicksort

Já não me lembro muito bem dos melhores em termos de complexidade temporal, pelo que vejas qual será o melhor para o teu caso, e que seja fácil de implementar. Se as listas de pessoas forem pequenas, podes optar por um dos primeiros 3, o Quicksort já é um pouco mais complicado de implementar.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
06-01-2010, 13:42
Mensagem: #6
RE: [Ajuda c#] Ordenar listapessoas com metodo de ordenacao
Boas!!

private void Swap(int firstIndex, int secondIndex)
{
object temp = this[firstIndex];
this[firstIndex] = this[secondIndex];
this[secondIndex] = temp;
}


// Algoritmo de ordenação Bubble Sort
public void BubbleSort()
{
bool trocas = true;
for (int i = 0; i < this.Count - 1 && trocas==true; i++)
{
trocas = false;
for (int j = this.Count - 1; j > i; j--)
{
IComparable leftE = (IComparable)this[j - 1];

// Se o elemento da esquerda é maior que o elemento da direita!
if (leftE.CompareTo((IComparable)this[j]) > 0)
{
Swap(j - 1, j);
trocas = true;
}
}
}
}


// Algoritmo de ordenação Selection Sort
public void SelectionSort()
{
// ciclo exterior - cada passagem ordena um elemento
int index, toIndex, indexOfSmallest;

for (index = 0; index < this.Count - 1; index++)
{
indexOfSmallest = index;

// ciclo interior - procura o menor elemento
for (toIndex = index + 1; toIndex < this.Count; toIndex++)
{
IComparable auxTo = (IComparable)this[toIndex];

if (auxTo.CompareTo(this[indexOfSmallest]) < 0)
indexOfSmallest = toIndex;
}
Swap(indexOfSmallest, index);
}
}

// Algoritmo de ordenação Insertion Sort
public void InsertionSort()
{
int index, auxIndex;
object temp;

// ciclo exterior - move a posição a testar
for (index = 1; index < this.Count; index++)
{
// se o elemento na posição index for menor que o elemento da sua esquerda
IComparable auxL = (IComparable)this[index - 1];

if (auxL.CompareTo( this[index]) > 0)
{
// guarda-se o elemento à parte
temp = this[index];
auxIndex = index;

// ciclo interior - move os outros elementos para a direita
IComparable other = null;
do
{
this[auxIndex] = this[auxIndex - 1];
auxIndex--;
if (auxIndex != 0)
other = (IComparable)this[auxIndex - 1];
} while (auxIndex > 0 && other.CompareTo(temp) > 0);

// insere o elemento na posição deixada livre
this[auxIndex] = temp;
}
}
}

// Métodos necessários ao algoritmo de ordenação Merge Sort
// Merge, permite fundir duas partes ordenadas de um vector
private void Merge(int fromLeft, int fromRight, int toIndex)
{
// Cria array auxiliar para copiar valores ordenadamente
SortableArray auxiliar = new SortableArray(toIndex - fromLeft + 1);

int i, j;
i = fromLeft;
j = fromRight+1;

// Copia para array auxiliar o menor valor
while (i <= fromRight && j <= toIndex)
{
IComparable auxi = (IComparable)this[i];

if (auxi.CompareTo(this[j]) <= 0)
{
auxiliar.Add(this[i]);
i++;
}
else
{
auxiliar.Add(this[j]);
j++;
}
} // ciclo while

for (; i <= fromRight; i++)
auxiliar.Add(this[i]);

for (; j <= toIndex; j++)
auxiliar.Add(this[j]);

// Repor o vector dos elementos
for ( i=fromLeft, j=0; i<=toIndex; i++, j++)
this[i] = auxiliar[j];
}


// MergeSort com argumentos - método privado
private void MergeSort(int fromIndex, int toIndex)
{
// se esta partição tiver mais do que um elemento
if (fromIndex < toIndex)
{
// calcula o ponto intermédio
int indexOfSplit = (fromIndex + toIndex) / 2;

// ordena uma parte
MergeSort(fromIndex, indexOfSplit);

// ordena a outra parte
MergeSort(indexOfSplit + 1, toIndex);

// mistura ordenadamente as duas partes já ordenadas
Merge(fromIndex, indexOfSplit, toIndex);
}
}


// Algoritmo de ordenação Merge Sort (public)
public void MergeSort()
{
MergeSort(0, this.Count - 1);
}


// Métodos associados ao algoritmo de ordenação Quick Sort
// Método de ordenação Quick Sort (private)
private void QuickSort(int fromIndex, int toIndex)
{
// se esta partição tiver mais do que um elemento
if (fromIndex < toIndex)
{
// Calcula valor pivot e garante que à sua esquerda ficam todos os valores do
// vector que lhe são menores e à sua direita ficam todos os valores que lhe são
// maiores, ainda que não necessáriamente ordenados
int indexOfSplit = Partition(fromIndex, toIndex);

// ordena uma parte
QuickSort(fromIndex, indexOfSplit - 1);
// ordena a outra parte
QuickSort(indexOfSplit, toIndex);
}
}

Penso que tens aqui tudo aquilo que precisas. Smile

Agora só tens de adaptar à necessidade.

Cumprimentos
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
18-05-2012, 20:22 (Esta mensagem foi modificada pela última vez a: 16-07-2012 22:39 por Ana.)
Mensagem: #7
RE: [Ajuda c#] Ordenar listapessoas com metodo de ordenacao
Tente esse artigo:
http://www.linhadecodigo.com.br/artigo/3...p-net.aspx

Beijinhos.

Patricia Lopes
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 2 Visitante(s)