¿Cómo se llama al método Icomparer.Compare() cuando se implementa Ordenar?
Frecuentes
Visto 411 equipos
1
- ¿Quién llama al método Icomparer.Compare()?
Considere la siguiente muestra.
Array.Sort(Myfiles, new customSort())
.
.
.
private class customSort : IComparer<object>
{
public override int Compare(obj A, obj B)
{
return (A.Value==B.Value?(0):((A.Value < B.Value)?(-1):(1)));
}
}
Si Myfiles contiene una colección de objetos,
- ¿Cómo se deciden A y B?.
- ¿Son objetos A y B consecutivos en la colección Myfiles?
- Si no, ¿cómo se seleccionan A y B de Myfiles?
- ¿El método Array.Sort() tiene que ver con eso?
3 Respuestas
1
Este método utiliza el algoritmo de clasificación introspectiva (introsort) de la siguiente manera:
- Si el tamaño de la partición es inferior a 16 elementos, utiliza un algoritmo de ordenación por inserción.
- Si el número de particiones supera 2 * LogN, donde N es el rango de la matriz de entrada, utiliza un algoritmo Heapsort.
- De lo contrario, utiliza un algoritmo Quicksort.
Desde http://msdn.microsoft.com/en-us/library/kwx6zbd4.aspx
Para la primera opción, aquí hay un buen gif: http://en.wikipedia.org/wiki/Insertion_sort#mediaviewer/File:Insertion-sort-example-300px.gif
Respondido el 12 de junio de 14 a las 11:06
1
Eso depende del algoritmo de clasificación. Cuando el algoritmo tiene que comparar dos objetos para determinar su orden relativo, llama al Compare
método.
Para algoritmos como Bubblesort A y B serían vecinos, para cualquier otra cosa que se me ocurra en este momento, podrían ser cualquier objeto de la colección.
Respondido el 12 de junio de 14 a las 11:06
0
Evidentemente la llamada se produce dentro del Sort
método. Todas las demás preguntas se refieren a la implementación interna de la Sort
método. Aunque puede mirar dentro de la lógica real, normalmente no debería molestarse ya que solo está interesado en el resultado final (es decir, que su matriz se ordene).
Respondido el 12 de junio de 14 a las 11:06
Por favor, no edites tu publicación si quieres hacer una pregunta diferente. Solo crea uno nuevo. - Dirk