Exportar (0) Imprimir
Expandir todo

Método genérico Array.Sort (T[])

Nota: este método es nuevo en la versión 2.0 de .NET Framework.

Ordena los elementos de toda una matriz Array utilizando la implementación de la interfaz genérica IComparable de cada elemento de Array.

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

public static void Sort<T> (
	T[] array
)
J# admite el uso de métodos y tipos genéricos, pero no admite la declaración de métodos y tipos nuevos.
JScript no admite el uso de métodos y tipos genéricos.

Parámetros de tipo

T

Tipo de los elementos de la matriz.

Parámetros

array

Matriz Array unidimensional de base cero que se va a ordenar.

Tipo de excepciónCondición

ArgumentNullException

array es referencia de objeto null (Nothing en Visual Basic).

InvalidOperationException

Uno o varios elementos de array no implementan la interfaz genérica IComparable.

Cada elemento de array debe implementar la interfaz genérica IComparable para poder realizar comparaciones con todos los demás elementos de array.

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

Este método utiliza el algoritmo QuickSort. 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.

Este método suele ser una operación O(n log n), donde n es la propiedad Length de array; aunque en el peor de los casos es una operación O(n^2).

En el ejemplo de código siguiente se muestran la sobrecarga del método genérico Sort(J[]) y la sobrecarga del método genérico BinarySearch(J[],J). Se crea una matriz de cadenas, sin que siga un orden concreto.

Se muestra la matriz, se ordena y se vuelve a mostrar.

NotaNota

Las llamadas a los métodos genéricos Sort y BinarySearch no presentan ninguna diferencia respecto de las llamadas a sus homólogos no genéricos, puesto que Visual Basic, C# y C++ deducen el tipo del parámetro de tipo genérico a partir del tipo del primer argumento. Si utiliza Desensamblador de MSIL (Ildasm.exe) para examinar el lenguaje intermedio de Microsoft (MSIL), puede ver que se llama a los métodos genéricos.

A continuación, se utiliza la sobrecarga del método genérico BinarySearch(J[],J) para buscar dos cadenas, una que no está en la matriz y otra que sí está. La matriz y el valor devuelto del método BinarySearch se pasan al método genérico ShowWhere, que muestra el valor del índice cuando se encuentra la cadena o, de lo contrario, los elementos entre los que se tendría que encontrar la cadena si estuviera en la matriz. El índice es negativo si la cadena no está en la matriz, de modo que el método ShowWhere toma un complemento bit a bit (el operador ~ en C# y Visual C++, Xor -1 en Visual Basic) para obtener el índice del primer elemento de la lista que es mayor que la cadena buscada.

using System;
using System.Collections.Generic;

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

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

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

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

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis");
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus");
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft