(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Array.Sort<T>-Methode (T[], Int32, Int32)

Sortiert die Elemente in einem Bereich von Elementen in einem Array mithilfe der Implementierung der generischen IComparable<T>-Schnittstelle jedes Elements des Array.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

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

Typparameter

T

Der Typ der Elemente des Arrays.

Parameter

array
Typ: T[]
Das zu sortierende eindimensionale und nullbasierte Array.
index
Typ: System.Int32
Der Startindex des zu sortierenden Bereichs.
length
Typ: System.Int32
Die Anzahl der Elemente im zu sortierenden Bereich.

AusnahmeBedingung
ArgumentNullException

array ist null.

ArgumentOutOfRangeException

index ist kleiner als die untere Grenze von array.

- oder -

length ist kleiner als 0 (null).

ArgumentException

index und length geben keinen gültigen Bereich in array an.

InvalidOperationException

Mindestens ein Element in array implementiert die generische IComparable<T>-Schnittstelle nicht.

Jedes Element innerhalb des angegebenen Bereichs von Elementen in array muss die generische IComparable<T>-Schnittstelle implementieren, damit es mit jedem anderen Element in array verglichen werden kann.

Wenn der Sortiervorgang nicht erfolgreich abgeschlossen werden kann, ist das Ergebnis undefiniert.

Diese Methode verwendet den introspektiven Algorithmus der Sortierung (introsort), wie folgt:

  • Wenn die Partitionsgröße weniger als 16 Elemente ist, verwendet sie einen Einfügungssortierung Algorithmus.

  • Wenn die Anzahl der Partitionen 2 überschreitet * protokollieren Sie N, wobei N der Bereich des Eingabearrays ist, es verwendet einen Heapsort Algorithmus.

  • Andernfalls verwendet sie einen Quicksort Algorithmus.

Diese Implementierung führt eine instabile Sortierung durch, d. h., bei zwei gleichen Elementen wird die Reihenfolge möglicherweise nicht beibehalten. Bei einer stabilen Sortierung wird im Gegensatz dazu die Reihenfolge von gleichen Elementen beibehalten.

Für Arrays, die sortiert werden, indem das Heapsort verwendet und Quicksort-Algorithmen, im ungünstigsten Fall, diese Methode ein Vorgang zu O (n Protokoll n) ist n, length ist.

Im folgenden Codebeispiel werden die generische Sort<T>(T[], Int32, Int32)-Methodenüberladung und die generische Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)-Methodenüberladung für das Sortieren eines Bereichs in einem Array veranschaulicht.

Im Codebeispiel wird das alternative Vergleichsverfahren ReverseCompare für Zeichenfolgen definiert, das die generische IComparer<string>-Schnittstelle (IComparer(Of String) in Visual Basic, IComparer<String^> in Visual C++) implementiert. Der Vergleich ruft die CompareTo(String)-Methode auf und kehrt die Reihenfolge der zu vergleichenden Elemente um, sodass die Zeichenfolgen vom höchsten zum niedrigsten Element und nicht umgekehrt sortiert werden.

Im Codebeispiel wird ein Array von Dinosauriernamen erstellt und angezeigt, das drei Pflanzenfresser und drei Fleischfresser (genauer gesagt Tyrannosaurier) enthält. Die generische Sort<T>(T[], Int32, Int32)-Methodenüberladung wird zum Sortieren der letzten drei Elemente des Arrays verwendet, das anschließend angezeigt wird. Die generische Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)-Methodenüberladung wird zusammen mit ReverseCompare zum Sortieren der letzten drei Elemente in umgekehrter Reihenfolge verwendet. Die vollständig unsortierten Dinosaurier werden erneut angezeigt.

HinweisHinweis

Aufrufe der generischen Sort<T>(T[], IComparer<T>)-Methode und BinarySearch<T>(T[], T, IComparer<T>)-Methode unterscheiden sich nicht von Aufrufen ihrer nicht generischen Entsprechungen, da der Typ des generischen Typparameters in Visual Basic, C# und C++ vom Typ des ersten Arguments abgeleitet wird. Wenn Sie mit dem Ildasm.exe (IL Disassembler) die MSIL (Microsoft Intermediate Language) untersuchen, stellen Sie fest, dass die generischen Methoden aufgerufen werden.


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
 */


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: 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 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft