Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

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

 

Publicado: octubre de 2016

Ordena los elementos en un intervalo de elementos en una Array mediante la implementación de interfaz genérica IComparable<T> de cada elemento de la Array.

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

public static void Sort<T>(
	T[] array,
	int index,
	int length
)

Parámetros

array
Type: T[]

Array unidimensional, basado en cero, que se va a ordenar

index
Type: System.Int32

Índice inicial del intervalo que se va a ordenar.

length
Type: System.Int32

Número de elementos del intervalo que se va a ordenar.

Parámetros de tipo

T

Tipo de los elementos de la matriz.

Exception Condition
ArgumentNullException

El valor de array es null.

ArgumentOutOfRangeException

index es menor que el límite inferior de array.

-o-

length es menor que cero.

ArgumentException

index y length no especifican un intervalo válido en array.

InvalidOperationException

Uno o más elementos de array no implementan la interfaz genérica IComparable<T>.

Cada elemento dentro del intervalo especificado de elementos de array debe implementar la IComparable<T> interfaz genérica para poder realizar comparaciones con los demás elementos de array.

Si la ordenación no se completa correctamente, los resultados son indefinidos.

Este método utiliza el algoritmo de ordenación introspectivas (introsort) como sigue:

  • Si el tamaño de la partición es menos de 16 elementos, utiliza un insertion sort algoritmo.

  • Si el número de particiones es superior a 2 * registroN, donde N es el intervalo de la matriz de entrada, utiliza un Heapsort algoritmo.

  • De lo contrario, utiliza un Quicksort algoritmo.

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

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

En el ejemplo de código siguiente se muestra el Sort<T>(T[], Int32, Int32) sobrecarga del método genérico y el Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) sobrecarga del método genérico para ordenar un rango de una matriz.

El ejemplo de código define un comparador alternativo para las cadenas, denominado ReverseCompare, que implementa el IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> en Visual C++) interfaz genérica. Las llamadas de comparador el CompareTo(String) método, invertir el orden de la comparación para que las cadenas ordenen alta o baja en lugar de bajo a alto.

El ejemplo de código se crea y muestra una matriz de nombres de dinosaurios, que consta de tres herbívoros siguen tres carnívoros (tiranosaurios, para ser precisos). El Sort<T>(T[], Int32, Int32) sobrecarga del método genérico se utiliza para ordenar los tres últimos elementos de la matriz, que se muestra a continuación. El Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) se utiliza la sobrecarga del método genérico con ReverseCompare para ordenar los tres últimos elementos en orden inverso. El dinosaurios exhaustivamente confundirse aparecerán de nuevo.

System_CAPS_noteNota

Las llamadas a la Sort<T>(T[], IComparer<T>) y BinarySearch<T>(T[], T, IComparer<T>) métodos genéricos no presentan ninguna diferencia de las llamadas a sus homólogas no genéricas, puesto que Visual Basic, C# y C++ deducen el tipo del parámetro de tipo genérico del tipo del primer argumento. Si utiliza el Ildasm.exe (IL Disassembler) para examinar el lenguaje intermedio de Microsoft (MSIL), puede ver que se llama a los métodos genéricos.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus", 
                              "Amargasaurus", 
                              "Mamenchisaurus", 
                              "Tarbosaurus",
                              "Tyrannosaurus", 
                              "Albertasaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort(dinosaurs, 3, 3)");
        Array.Sort(dinosaurs, 3, 3);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, 3, 3, rc)");
        Array.Sort(dinosaurs, 3, 3, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: