Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Array.Sort<T> (Método) (T[], Comparison<T>)

Ordena los elementos de una matriz Array utilizando el delegado Comparison<T> especificado.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

public static void Sort<T>(
	T[] array,
	Comparison<T> comparison
)

Parámetros de tipo

T

Tipo de los elementos de la matriz.

Parámetros

array
Tipo: T[]
Matriz Array unidimensional de base cero que se va a ordenar.
comparison
Tipo: System.Comparison<T>
Delegado Comparison<T> que se va a utilizar al comparar elementos.

ExcepciónCondición
ArgumentNullException

array es null.

O bien

comparison es null.

ArgumentException

La implementación de comparison ha producido un error durante la ordenación. Por ejemplo, es posible que comparison no devuelva 0 al comparar un elemento con sigo mismo.

Si la ordenación no se realiza correctamente, los resultados quedarán sin definir.

Este método utiliza el algoritmo introspectivo sort (introsort) como sigue:

  • Si el tamaño de la partición es menor que 16 elementos, utiliza ordenación de inserción un algoritmo.

  • Si el número de particiones supera 2 * registrarf, donde es el intervalo f de la matriz de entrada, utiliza Heapsort un algoritmo.

  • Si no, utiliza Quicksort un algoritmo.

Esta implementación realiza una ordenación inestable; es decir, si hay dos elementos iguales, es posible que no se mantenga su orden. En contraste, una ordenación estable conserva el orden de los elementos que son iguales.

Para las matrices que se ordenan mediante el Heapsort y algoritmos de Quicksort, en el peor de los casos, este método es una operación de O (n registrar n), donde Lengthn de array.

Notas para los llamadores

.NET Framework 4 y versiones anteriores utilizaban solo el algoritmo de Quicksort. Quicksort identifica comparadores no válidos en algunas situaciones en las que la operación de ordenación produzca una excepción de IndexOutOfRangeException , y produce una excepción de ArgumentException al llamador. A partir de .NET Framework 4.5, es posible que ordenar las operaciones que produjo previamente ArgumentException no producirá una excepción, porque los algoritmos de ordenación y de heapsort de inserción no detectan un comparador no válido. En general, esto se aplica a las matrices con menos de 16 elementos.

En el ejemplo de código siguiente se muestra la sobrecarga del método Sort(Comparison<T>).

En el ejemplo de código se define un método de comparación alternativo para las cadenas, denominado CompareDinosByLength. Este método funciona de la siguiente manera: en primer lugar, se prueban los términos de la comparación para null, y se considera una referencia nula como un valor menor que una referencia no nula. En segundo lugar, se compara la longitud de las cadenas, y la cadena más larga se considera la mayor. En tercer lugar, si las longitudes son iguales, se utiliza la comparación de cadena ordinaria.

Se crea una matriz de cadenas y se rellena de cuatro cadenas, sin un orden concreto. La lista también incluye una cadena vacía y una referencia nula. Se muestra la lista, luego se ordena utilizando un delegado genérico Comparison<T> que representa al método CompareDinosByLength y se vuelve a mostrar nuevamente.


using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal. 
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater. 
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the 
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        string[] dinosaurs = {
            "Pachycephalosaurus",
            "Amargasaurus",
            "",
            null,
            "Mamenchisaurus",
            "Deinonychus" };
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        Array.Sort(dinosaurs, CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(string[] arr)
    {
        Console.WriteLine();
        foreach( string s in arr )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft