[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. |
|||
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 Os meus artigos | O meu site |
|||
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"
|
|||
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 |
|||
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. |
|||
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. Agora só tens de adaptar à necessidade. Cumprimentos |
|||
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 | |||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 2 Visitante(s)