Ordenacion de una lista de objetos

31/05/2007 - 19:48 por Edgar | Informe spam
Hola que tal oigan tengo una pregunta para ustedes tengo una lista de
objetos de tipo estudiante:
Pero quiero hacer una ordenacion de tipo MergeSort, el algoritmo ya por ahi
lo tengo en una clase llamada Sorting
pero no se como vincular este algoritmo con la lista de objetos.

Mas o menos lo que quisiera hacer seria lo siguiente: lista.mergeSort(); y
que me ordene por este metodo, pero no se como vincular la clase que tengo
(sorting) que contiene el metodo MergeSort a la lista de objetos.
de hecho intente probar con el metodo Sort que ya tiene el List, pero me
marco que no se pueden comparar matrices, entonces no se como hacerlo,
agradecere si alguien me puede dar alguna idea.

Anexo parte del codigo que tengo


List <estudiante > lista=new List<estudiante>() ;
estudiante edgar = new estudiante("Edgar", "87-7-03-70", 485,
"Sistemas Computacionales");
estudiante javier = new estudiante("Javier", "87-7-03-72", 955,
"Electronica");
estudiante Pedro = new estudiante("Pedro", "87-7-03-73", 554,
"Electromecanica");
estudiante Aaron = new estudiante("Aaron", "87-4-15-55", 9823,
"Informatica");
lista.Add(edgar);
lista.Add(javier);
lista.Add(Pedro);
lista.Add(Aaron);

//esta es la que me ordenaria
lista.mergeSort();



//clase estudiante

public class estudiante
{
public string name;
public string telefono;
public int matricula;


public string carrera;

public string Carrera
{
get { return carrera; }
set { carrera = value; }
}

public string Telefono
{
get { return telefono; }
set { telefono = value; }
}

public int Matricula
{
get { return matricula; }
set { matricula = value; }
}

public string Name
{
get { return name; }
set { name = value; }
}

public estudiante(string Name, string Tel, int mat, string Career)
{

name = Name;
telefono = Tel;
matricula = mat ;
carrera = Career;

}


//clase sorting
public static class Sorting
{


public static int [] mergeSort(int[] a, int[] tmpArray, int left, int
right)
{

if (left<right){
int center=(left+right)/2;
mergeSort(a,tmpArray, left, center);
mergeSort(a, tmpArray, center+1, right);
merge(a, tmpArray, left, center+1, right);

}

return a;

}

public static void merge(int[] a, int[] tmpArray, int leftPos, int
rightPos, int rightEnd)
{

int leftEnd=rightPos-1;
int tmpPos=leftPos;
int numElements=rightEnd-leftPos+1;

while (leftPos<=leftEnd && rightPos<=rightEnd){

if (a[leftPos]<(a[rightPos]))
tmpArray[tmpPos++]=a[leftPos++];
else
tmpArray[tmpPos++]=a[rightPos++];

}

while(leftPos<=leftEnd)
tmpArray[tmpPos++]=a[leftPos++];

while(rightPos<=rightEnd)
tmpArray[tmpPos++]=a[rightPos++];

for (int i=0; i<numElements; i++, rightEnd--)
a[rightEnd]=tmpArray[rightEnd];
}

}
 

Leer las respuestas

#1 Alberto Poblacion
11/06/2007 - 10:20 | Informe spam
"principiante" wrote in message
news:
Si quieres añadirle una función a una clase que ya existe y que no
puedes modificar, necesitas C# versión 3; con la 2 no se puede.



La version 3 no ha salido todavia. No es asi?




Me respondo yo mismo que No, luego de urgar en la pagina de Microsoft.


No se por que este tipo de preguntas nuuunca se responden en este foro ;)
Me intriga eso.



Lo siento, te habría respondido antes pero he estado de viaje y no he
tenido acceso a las News. La versión 3 de C# viene con el Visual Studio
2008, nombre en código "Orcas". Todavía no ha salido "definitivamente", pero
la beta se puede descargar gratuitamente y es muy estable.

Preguntas similares