Array.Sort Metoda

Definice

Seřadí prvky v jednorozměrném poli.

Přetížení

Sort(Array, Array, Int32, Int32, IComparer)

Seřadí rozsah prvků v páru jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadané IComparer.

Sort(Array, Int32, Int32, IComparer)

Seřadí prvky v rozsahu prvků v jednorozměrném Array pomocí zadaného IComparer.

Sort(Array, Array, Int32, Int32)

Seřadí rozsah prvků v páru jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable implementace každého klíče.

Sort(Array, Int32, Int32)

Seřadí prvky v rozsahu prvků v jednorozměrném Array pomocí IComparable implementace každého prvku Array.

Sort(Array, Array, IComparer)

Seřadí dvojici jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadaného IComparer.

Sort(Array, Array)

Seřadí dvojici jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable implementace každého klíče.

Sort(Array)

Seřadí prvky v celém jednorozměrném Array pomocí IComparable implementace každého prvku Array.

Sort(Array, IComparer)

Seřadí prvky v jednorozměrném Array pomocí zadaného IComparer.

Sort<T>(T[])

Seřadí prvky v celém Array pomocí IComparable<T> obecné rozhraní implementace každého prvku Array.

Sort<T>(T[], IComparer<T>)

Seřadí prvky v Array pomocí zadaného IComparer<T> obecného rozhraní.

Sort<T>(T[], Comparison<T>)

Seřadí prvky v Array pomocí zadaného Comparison<T>.

Sort<T>(T[], Int32, Int32)

Seřadí prvky v rozsahu prvků v Array pomocí IComparable<T> obecné rozhraní implementace každého prvku Array.

Sort<T>(T[], Int32, Int32, IComparer<T>)

Seřadí prvky v rozsahu prvků v Array pomocí zadaného IComparer<T> obecného rozhraní.

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)

Seřadí rozsah prvků v páru Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadaného IComparer<T> obecného rozhraní.

Sort<TKey,TValue>(TKey[], TValue[])

Seřadí dvojici Array objektů (jeden obsahuje klíče a druhá obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable<T> implementace obecného rozhraní každého klíče.

Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>)

Seřadí dvojici Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadaného IComparer<T> obecného rozhraní.

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)

Seřadí rozsah prvků v páru Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable<T> implementace obecného rozhraní každého klíče.

Sort(Array, Array, Int32, Int32, IComparer)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí rozsah prvků v páru jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadané IComparer.

public static void Sort (Array keys, Array items, int index, int length, System.Collections.IComparer comparer);
public static void Sort (Array keys, Array? items, int index, int length, System.Collections.IComparer? comparer);

Parametry

keys
Array

Jednorozměrná Array, která obsahuje klíče k řazení.

items
Array

Jednorozměrná Array, která obsahuje položky, které odpovídají jednotlivým klíčům v keysArray.

-nebo-

null řazení pouze keysArray.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

comparer
IComparer

Implementace IComparer, která se má použít při porovnávání prvků.

-nebo-

null použít IComparable implementaci každého prvku.

Výjimky

keys je null.

keys Array je multidimenzionální.

-nebo-

items Array je multidimenzionální.

index je menší než dolní mez keys.

-nebo-

length je menší než nula.

items není nulla dolní mez keys neodpovídá dolní hranici items.

-nebo-

items není nulla délka keys je větší než délka items.

-nebo-

index a length nezadávají platný rozsah v keysArray.

-nebo-

items není nulla index a length nezadávají platný rozsah v itemsArray.

-nebo-

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

comparer je nulla jeden nebo více prvků v keysArray neimplementují rozhraní IComparable.

Příklady

Následující příklad kódu ukazuje, jak seřadit dvě přidružená pole, kde první matice obsahuje klíče a druhá matice obsahuje hodnoty. Řazení se provádí pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Pokud je comparernull, musí každý klíč v zadaném rozsahu prvků v keysArray implementovat rozhraní IComparable, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

.NET obsahuje předdefinované implementace IComparer uvedené v následující tabulce.

Implementace Popis
System.Collections.CaseInsensitiveComparer Porovná všechny dva objekty, ale provádí porovnání řetězců bez rozlišování malých a velkých písmen.
Comparer.Default Porovná všechny dva objekty pomocí konvencí řazení aktuální jazykové verze.
Comparer.DefaultInvariant Porovná všechny dva objekty pomocí konvencí řazení invariantní jazykové verze.
Comparer<T>.Default Porovná dva objekty typu T pomocí výchozího pořadí řazení typu.

Vlastní porovnání můžete také podporovat tak, že do parametru comparer poskytnete instanci vlastní implementace IComparer. Příklad to dělá definováním vlastní IComparer implementace, která obrátí výchozí pořadí řazení a provede porovnání řetězců bez rozlišování velkých a malých písmen.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Int32, Int32, IComparer)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v rozsahu prvků v jednorozměrném Array pomocí zadaného IComparer.

public static void Sort (Array array, int index, int length, System.Collections.IComparer comparer);
public static void Sort (Array array, int index, int length, System.Collections.IComparer? comparer);

Parametry

array
Array

Jednorozměrná Array, která se má seřadit.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

comparer
IComparer

Implementace IComparer, která se má použít při porovnávání prvků.

-nebo-

null použít IComparable implementaci každého prvku.

Výjimky

array je null.

array je multidimenzionální.

index je menší než dolní mez array.

-nebo-

length je menší než nula.

index a length nezadávají platný rozsah v array.

-nebo-

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

comparer je nulla jeden nebo více prvků v array neimplementují rozhraní IComparable.

Příklady

Následující příklad kódu ukazuje, jak seřadit hodnoty v Array pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Poznámky

Je-li comparernull, musí každý prvek v zadaném rozsahu prvků v array implementovat rozhraní IComparable, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

.NET obsahuje předdefinované implementace IComparer uvedené v následující tabulce.

Implementace Popis
System.Collections.CaseInsensitiveComparer Porovná všechny dva objekty, ale provádí porovnání řetězců bez rozlišování malých a velkých písmen.
Comparer.Default Porovná všechny dva objekty pomocí konvencí řazení aktuální jazykové verze.
Comparer.DefaultInvariant Porovná všechny dva objekty pomocí konvencí řazení invariantní jazykové verze.
Comparer<T>.Default Porovná dva objekty typu T pomocí výchozího pořadí řazení typu.

Vlastní porovnání můžete také podporovat tak, že do parametru comparer poskytnete instanci vlastní implementace IComparer. Příklad to dělá definováním třídy ReverseComparer, která obrátí výchozí pořadí řazení pro instance typu a provádí porovnání řetězců bez rozlišování velkých a malých písmen.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Array, Int32, Int32)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí rozsah prvků v páru jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable implementace každého klíče.

public static void Sort (Array keys, Array items, int index, int length);
public static void Sort (Array keys, Array? items, int index, int length);

Parametry

keys
Array

Jednorozměrná Array, která obsahuje klíče k řazení.

items
Array

Jednorozměrná Array, která obsahuje položky, které odpovídají jednotlivým klíčům v keysArray.

-nebo-

null řazení pouze keysArray.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

Výjimky

keys je null.

keys Array je multidimenzionální.

-nebo-

items Array je multidimenzionální.

index je menší než dolní mez keys.

-nebo-

length je menší než nula.

items není nulla délka keys je větší než délka items.

-nebo-

index a length nezadávají platný rozsah v keysArray.

-nebo-

items není nulla index a length nezadávají platný rozsah v itemsArray.

Nejméně jeden prvek v keysArray neimplementuje rozhraní IComparable.

Příklady

Následující příklad kódu ukazuje, jak seřadit dvě přidružená pole, kde první matice obsahuje klíče a druhá matice obsahuje hodnoty. Řazení se provádí pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Každý klíč v zadaném rozsahu prvků v keysArray musí implementovat rozhraní IComparable, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Int32, Int32)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v rozsahu prvků v jednorozměrném Array pomocí IComparable implementace každého prvku Array.

public static void Sort (Array array, int index, int length);

Parametry

array
Array

Jednorozměrná Array, která se má seřadit.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

Výjimky

array je null.

array je multidimenzionální.

index je menší než dolní mez array.

-nebo-

length je menší než nula.

index a length nezadávají platný rozsah v array.

Nejméně jeden prvek v array neimplementuje IComparable rozhraní.

Příklady

Následující příklad kódu ukazuje, jak seřadit hodnoty v Array pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Poznámky

Každý prvek v zadaném rozsahu prvků v array musí implementovat rozhraní IComparable, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Array, IComparer)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí dvojici jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadaného IComparer.

public static void Sort (Array keys, Array items, System.Collections.IComparer comparer);
public static void Sort (Array keys, Array? items, System.Collections.IComparer? comparer);

Parametry

keys
Array

Jednorozměrná Array, která obsahuje klíče k řazení.

items
Array

Jednorozměrná Array, která obsahuje položky, které odpovídají jednotlivým klíčům v keysArray.

-nebo-

null řazení pouze keysArray.

comparer
IComparer

Implementace IComparer, která se má použít při porovnávání prvků.

-nebo-

null použít IComparable implementaci každého prvku.

Výjimky

keys je null.

keys Array je multidimenzionální.

-nebo-

items Array je multidimenzionální.

items není nulla délka keys je větší než délka items.

-nebo-

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

comparer je nulla jeden nebo více prvků v keysArray neimplementují rozhraní IComparable.

Příklady

Následující příklad ukazuje, jak seřadit dvě přidružená pole, kde první matice obsahuje klíče a druhá matice obsahuje hodnoty. Řazení se provádí pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Pokud je comparernull, musí každý klíč v keysArray implementovat rozhraní IComparable, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

.NET obsahuje předdefinované implementace IComparer uvedené v následující tabulce.

Implementace Popis
System.Collections.CaseInsensitiveComparer Porovná všechny dva objekty, ale provádí porovnání řetězců bez rozlišování malých a velkých písmen.
Comparer.Default Porovná všechny dva objekty pomocí konvencí řazení aktuální jazykové verze.
Comparer.DefaultInvariant Porovná všechny dva objekty pomocí konvencí řazení invariantní jazykové verze.
Comparer<T>.Default Porovná dva objekty typu T pomocí výchozího pořadí řazení typu.

Vlastní porovnání můžete také podporovat tak, že do parametru comparer poskytnete instanci vlastní implementace IComparer. Příklad to dělá definováním IComparer implementace, která obrátí výchozí pořadí řazení a provede porovnání řetězců bez rozlišování malých a velkých písmen.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengthkeys.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Array)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí dvojici jednorozměrných Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable implementace každého klíče.

public static void Sort (Array keys, Array items);
public static void Sort (Array keys, Array? items);

Parametry

keys
Array

Jednorozměrná Array, která obsahuje klíče k řazení.

items
Array

Jednorozměrná Array, která obsahuje položky, které odpovídají jednotlivým klíčům v keysArray.

-nebo-

null řazení pouze keysArray.

Výjimky

keys je null.

keys Array je multidimenzionální.

-nebo-

items Array je multidimenzionální.

items není nulla délka keys je větší než délka items.

Nejméně jeden prvek v keysArray neimplementuje rozhraní IComparable.

Příklady

Následující příklad ukazuje, jak seřadit dvě přidružená pole, kde první matice obsahuje klíče a druhá matice obsahuje hodnoty. Řazení se provádí pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Každý klíč v keysArray musí implementovat rozhraní IComparable, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengthkeys.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v celém jednorozměrném Array pomocí IComparable implementace každého prvku Array.

public static void Sort (Array array);

Parametry

array
Array

Jednorozměrná Array, která se má seřadit.

Výjimky

array je null.

array je multidimenzionální.

Nejméně jeden prvek v array neimplementuje IComparable rozhraní.

Příklady

Následující příklad kódu ukazuje, jak seřadit hodnoty v Array pomocí výchozího porovnávače a vlastního porovnávače, který obrátí pořadí řazení. Všimněte si, že výsledek se může lišit v závislosti na aktuální CultureInfo.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Poznámky

Každý prvek array musí implementovat IComparable rozhraní, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, IComparer)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v jednorozměrném Array pomocí zadaného IComparer.

public static void Sort (Array array, System.Collections.IComparer comparer);
public static void Sort (Array array, System.Collections.IComparer? comparer);

Parametry

array
Array

Jednorozměrné pole, které se má seřadit.

comparer
IComparer

Implementace, která se má použít při porovnávání prvků.

-nebo-

null použít IComparable implementaci každého prvku.

Výjimky

array je null.

array je multidimenzionální.

comparer je nulla jeden nebo více prvků v array neimplementují rozhraní IComparable.

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

Příklady

Následující příklad seřadí hodnoty v řetězcovém poli pomocí výchozího porovnávače. Definuje také vlastní implementaci IComparer s názvem ReverseComparer, která při porovnávání řetězců nerozlišuje malá a velká písmena. Všimněte si, že výstup se může lišit v závislosti na aktuální jazykové verzi.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Poznámky

Je-li comparernull, musí každý prvek array implementovat IComparable rozhraní, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

.NET obsahuje předdefinované implementace IComparer uvedené v následující tabulce.

Implementace Popis
System.Collections.CaseInsensitiveComparer Porovná všechny dva objekty, ale provádí porovnání řetězců bez rozlišování malých a velkých písmen.
Comparer.Default Porovná všechny dva objekty pomocí konvencí řazení aktuální jazykové verze.
Comparer.DefaultInvariant Porovná všechny dva objekty pomocí konvencí řazení invariantní jazykové verze.
Comparer<T>.Default Porovná dva objekty typu T pomocí výchozího pořadí řazení typu.

Vlastní porovnání můžete také podporovat tak, že do parametru comparer poskytnete instanci vlastní implementace IComparer. Příklad to dělá definováním třídy ReverseComparer, která obrátí výchozí pořadí řazení pro instance typu a provádí porovnání řetězců bez rozlišování velkých a malých písmen.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[])

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v celém Array pomocí IComparable<T> obecné rozhraní implementace každého prvku Array.

public static void Sort<T> (T[] array);

Parametry typu

T

Typ prvků pole.

Parametry

array
T[]

Jednorozměrná Array založená na nule, která se má seřadit.

Výjimky

array je null.

Nejméně jeden prvek v array neimplementuje IComparable<T> obecné rozhraní.

Příklady

Následující příklad kódu ukazuje Sort<T>(T[]) přetížení obecné metody a BinarySearch<T>(T[], T) přetížení obecné metody. Vytvoří se pole řetězců bez konkrétního pořadí.

Pole se zobrazí, seřadí a znovu zobrazí.

Poznámka

Volání Sort a BinarySearch obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvního argumentu. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

BinarySearch<T>(T[], T) přetížení obecné metody se pak použije k vyhledání dvou řetězců, jedné, která není v poli a jedna, která je. Pole a návratová hodnota metody BinarySearch se předají ShowWhere obecné metodě, která zobrazí hodnotu indexu, pokud je řetězec nalezen, a jinak prvky, mezi kterými by hledaný řetězec spadal, kdyby byl v poli. Index je záporný, pokud řetězec není n pole, takže metoda ShowWhere přebírá bitový doplněk (~ operátor v jazyce C# a Visual C++, Xor -1 v jazyce Visual Basic) k získání indexu prvního prvku v seznamu, který je větší než hledaný řetězec.

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

Poznámky

Každý prvek array musí implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], IComparer<T>)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v Array pomocí zadaného IComparer<T> obecného rozhraní.

public static void Sort<T> (T[] array, System.Collections.Generic.IComparer<T> comparer);
public static void Sort<T> (T[] array, System.Collections.Generic.IComparer<T>? comparer);

Parametry typu

T

Typ prvků pole.

Parametry

array
T[]

Jednorozměrná Array nula, která se má seřadit.

comparer
IComparer<T>

IComparer<T> implementace obecného rozhraní, která se má použít při porovnávání prvků, nebo null použít IComparable<T> implementaci obecného rozhraní každého prvku.

Výjimky

array je null.

comparer je nulla jeden nebo více prvků v array neimplementují obecné rozhraní IComparable<T>.

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

Příklady

Následující příklad kódu ukazuje Sort<T>(T[], IComparer<T>) přetížení obecné metody a BinarySearch<T>(T[], T, IComparer<T>) přetížení obecné metody.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Pole se zobrazí, seřadí a znovu zobrazí. Pole musí být seřazena, aby bylo možné použít metodu BinarySearch.

Poznámka

Volání Sort<T>(T[], IComparer<T>) a BinarySearch<T>(T[], T, IComparer<T>) obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvního argumentu. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

BinarySearch<T>(T[], T, IComparer<T>) přetížení obecné metody se pak použije k vyhledání dvou řetězců, jedné, která není v poli a jedna, která je. Pole a návratová hodnota metody BinarySearch<T>(T[], T, IComparer<T>) se předají ShowWhere obecné metodě, která zobrazí hodnotu indexu, pokud je řetězec nalezen, a jinak prvky, mezi kterými by hledaný řetězec spadal, kdyby byl v poli. Index je záporný, pokud řetězec není n pole, takže metoda ShowWhere přebírá bitový doplněk (~ operátor v jazyce C# a Visual C++, Xor -1 v jazyce Visual Basic) k získání indexu prvního prvku v seznamu, který je větší než hledaný řetězec.

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",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

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

        ReverseComparer rc = new ReverseComparer();

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

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

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

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc);
        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

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

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

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

Poznámky

Je-li comparernull, musí každý prvek array implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], Comparison<T>)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v Array pomocí zadaného Comparison<T>.

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

Parametry typu

T

Typ prvků pole.

Parametry

array
T[]

Jednorozměrná Array založená na nule, která se má seřadit.

comparison
Comparison<T>

Comparison<T> použít při porovnávání prvků.

Výjimky

array je null.

-nebo-

comparison je null.

Implementace comparison způsobila chybu během řazení. Například comparison nemusí při porovnávání položky se sebou vrátit hodnotu 0.

Příklady

Následující příklad kódu ukazuje Sort(Comparison<T>) přetížení metody.

Příklad kódu definuje alternativní metodu porovnání řetězců s názvem CompareDinosByLength. Tato metoda funguje následovně: Nejprve se srovnávací testy testují pronulla nulový odkaz je považován za menší než nenulový. Za druhé se porovnávají délky řetězců a delší řetězec se považuje za větší. Za třetí, pokud jsou délky stejné, použije se běžné porovnání řetězců.

Vytvoří se pole řetězců a naplní se čtyřmi řetězci bez konkrétního pořadí. Seznam obsahuje také prázdný řetězec a odkaz null. Zobrazí se seznam seřazený pomocí Comparison<T> obecného delegáta představujícího metodu CompareDinosByLength a znovu se zobrazí.

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

Poznámky

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá introspektivní řazení (introsort) algoritmus následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů se to týká polí s méně než nebo rovnou 6 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], Int32, Int32)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v rozsahu prvků v Array pomocí IComparable<T> obecné rozhraní implementace každého prvku Array.

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

Parametry typu

T

Typ prvků pole.

Parametry

array
T[]

Jednorozměrná Array založená na nule, která se má seřadit.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

Výjimky

array je null.

index je menší než dolní mez array.

-nebo-

length je menší než nula.

index a length nezadávají platný rozsah v array.

Nejméně jeden prvek v array neimplementuje IComparable<T> obecné rozhraní.

Příklady

Následující příklad kódu ukazuje Sort<T>(T[], Int32, Int32) přetížení obecné metody a Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecné metody pro řazení oblasti v poli.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů, které se skládají ze tří bylin, následovaných třemi masožvory (tyrannosaurids, aby byly přesné). Sort<T>(T[], Int32, Int32) přetížení obecné metody se používá k seřazení posledních tří prvků pole, které se pak zobrazí. Přetížení Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) obecné metody se používá s ReverseCompare k seřazení posledních tří prvků v obráceném pořadí. Důkladně zmatení dinosauři se znovu zobrazí.

Poznámka

Volání Sort<T>(T[], IComparer<T>) a BinarySearch<T>(T[], T, IComparer<T>) obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvního argumentu. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

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

Poznámky

Každý prvek v zadaném rozsahu prvků v array musí implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], Int32, Int32, IComparer<T>)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí prvky v rozsahu prvků v Array pomocí zadaného IComparer<T> obecného rozhraní.

public static void Sort<T> (T[] array, int index, int length, System.Collections.Generic.IComparer<T> comparer);
public static void Sort<T> (T[] array, int index, int length, System.Collections.Generic.IComparer<T>? comparer);

Parametry typu

T

Typ prvků pole.

Parametry

array
T[]

Jednorozměrná Array založená na nule, která se má seřadit.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

comparer
IComparer<T>

IComparer<T> implementace obecného rozhraní, která se má použít při porovnávání prvků, nebo null použít IComparable<T> implementaci obecného rozhraní každého prvku.

Výjimky

array je null.

index je menší než dolní mez array.

-nebo-

length je menší než nula.

index a length nezadávají platný rozsah v array.

-nebo-

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

comparer je nulla jeden nebo více prvků v array neimplementují obecné rozhraní IComparable<T>.

Příklady

Následující příklad kódu ukazuje Sort<T>(T[], Int32, Int32) přetížení obecné metody a Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecné metody pro řazení oblasti v poli.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů, které se skládají ze tří bylin, následovaných třemi masožvory (tyrannosaurids, aby byly přesné). Sort<T>(T[], Int32, Int32) přetížení obecné metody se používá k seřazení posledních tří prvků pole, které se pak zobrazí. Přetížení Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) obecné metody se používá s ReverseCompare k seřazení posledních tří prvků v obráceném pořadí. Důkladně zmatení dinosauři se znovu zobrazí.

Poznámka

Volání Sort<T>(T[], IComparer<T>) a BinarySearch<T>(T[], T, IComparer<T>) obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvního argumentu. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

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

Poznámky

Je-li comparernull, musí každý prvek v zadaném rozsahu prvků v array implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším prvkem v array.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí rozsah prvků v páru Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadaného IComparer<T> obecného rozhraní.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items, int index, int length, System.Collections.Generic.IComparer<TKey> comparer);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items, int index, int length, System.Collections.Generic.IComparer<TKey>? comparer);

Parametry typu

TKey

Typ prvků pole klíčů.

TValue

Typ prvků pole položek.

Parametry

keys
TKey[]

Jednorozměrná Array založená na nule, která obsahuje klíče k řazení.

items
TValue[]

Jednorozměrný Array založený na nule, který obsahuje položky, které odpovídají klíčům v keys, nebo null seřadit pouze keys.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

comparer
IComparer<TKey>

IComparer<T> implementace obecného rozhraní, která se má použít při porovnávání prvků, nebo null použít IComparable<T> implementaci obecného rozhraní každého prvku.

Výjimky

keys je null.

index je menší než dolní mez keys.

-nebo-

length je menší než nula.

items není nulla dolní mez keys neodpovídá dolní hranici items.

-nebo-

items není nulla délka keys je větší než délka items.

-nebo-

index a length nezadávají platný rozsah v keysArray.

-nebo-

items není nulla index a length nezadávají platný rozsah v itemsArray.

-nebo-

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

comparer je nulla jeden nebo více prvků v keysArray neimplementují obecné rozhraní IComparable<T>.

Příklady

Následující příklad kódu ukazuje Sort<TKey,TValue>(TKey[], TValue[]), Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)a Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecné metody pro řazení dvojic polí, které představují klíče a hodnoty.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string>(IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů (klíče) a pole celých čísel představující maximální délku každého dinosaura v metrech (hodnoty). Pole se pak seřadí a zobrazí několikrát:

Poznámka

Volání obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvních dvou argumentů. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

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 = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Pokud je comparernull, musí každý klíč v zadaném rozsahu prvků v keysArray implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[])

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí dvojici Array objektů (jeden obsahuje klíče a druhá obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable<T> implementace obecného rozhraní každého klíče.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items);

Parametry typu

TKey

Typ prvků pole klíčů.

TValue

Typ prvků pole položek.

Parametry

keys
TKey[]

Jednorozměrná Array založená na nule, která obsahuje klíče k řazení.

items
TValue[]

Jednorozměrný Array založený na nule, který obsahuje položky, které odpovídají klíčům v keys, nebo null seřadit pouze keys.

Výjimky

keys je null.

items není nulla dolní mez keys neodpovídá dolní hranici items.

-nebo-

items není nulla délka keys je větší než délka items.

Jeden nebo více prvků v keysArray neimplementují obecné rozhraní IComparable<T>.

Příklady

Následující příklad kódu ukazuje Sort<TKey,TValue>(TKey[], TValue[]), Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)a Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecné metody pro řazení dvojic polí, které představují klíče a hodnoty.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů (klíče) a pole celých čísel představující maximální délku každého dinosaura v metrech (hodnoty). Pole se pak seřadí a zobrazí několikrát:

Poznámka

Volání obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvních dvou argumentů. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

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 = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Každý klíč v keysArray musí implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí dvojici Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí zadaného IComparer<T> obecného rozhraní.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items, System.Collections.Generic.IComparer<TKey> comparer);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items, System.Collections.Generic.IComparer<TKey>? comparer);

Parametry typu

TKey

Typ prvků pole klíčů.

TValue

Typ prvků pole položek.

Parametry

keys
TKey[]

Jednorozměrná Array založená na nule, která obsahuje klíče k řazení.

items
TValue[]

Jednorozměrný Array založený na nule, který obsahuje položky, které odpovídají klíčům v keys, nebo null seřadit pouze keys.

comparer
IComparer<TKey>

IComparer<T> implementace obecného rozhraní, která se má použít při porovnávání prvků, nebo null použít IComparable<T> implementaci obecného rozhraní každého prvku.

Výjimky

keys je null.

items není nulla dolní mez keys neodpovídá dolní hranici items.

-nebo-

items není nulla délka keys je větší než délka items.

-nebo-

Implementace comparer způsobila chybu během řazení. Například comparer nemusí při porovnávání položky se sebou vrátit hodnotu 0.

comparer je nulla jeden nebo více prvků v keysArray neimplementují obecné rozhraní IComparable<T>.

Příklady

Následující příklad kódu ukazuje Sort<TKey,TValue>(TKey[], TValue[]), [], Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)a Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecných metod pro řazení dvojic polí, které představují klíče a hodnoty.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů (klíče) a pole celých čísel představující maximální délku každého dinosaura v metrech (hodnoty). Pole se pak seřadí a zobrazí několikrát:

Poznámka

Volání obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvních dvou argumentů. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

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 = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Pokud je comparernull, musí každý klíč v keysArray implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace protokolu O(nn), kde n je Lengtharray.

Poznámky pro volající

Rozhraní .NET Framework 4 a starší verze používaly pouze algoritmus Quicksort. Quicksort identifikuje neplatné porovnávače v některých situacích, kdy operace řazení vyvolá výjimku IndexOutOfRangeException a vyvolá výjimku ArgumentException volajícímu. Počínaje rozhraním .NET Framework 4.5 je možné, že operace řazení, které dříve vyvolaly ArgumentException nevyvolají výjimku, protože algoritmy řazení a haldy nezjistí neplatný porovnávač. Ve většině případů to platí pro pole s méně než nebo rovnou 16 prvkům.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)

Zdroj:
Array.cs
Zdroj:
Array.cs
Zdroj:
Array.cs

Seřadí rozsah prvků v páru Array objektů (jeden obsahuje klíče a druhý obsahuje odpovídající položky) na základě klíčů v prvním Array pomocí IComparable<T> implementace obecného rozhraní každého klíče.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items, int index, int length);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items, int index, int length);

Parametry typu

TKey

Typ prvků pole klíčů.

TValue

Typ prvků pole položek.

Parametry

keys
TKey[]

Jednorozměrná Array založená na nule, která obsahuje klíče k řazení.

items
TValue[]

Jednorozměrný Array založený na nule, který obsahuje položky, které odpovídají klíčům v keys, nebo null seřadit pouze keys.

index
Int32

Počáteční index rozsahu, který se má seřadit.

length
Int32

Počet prvků v oblasti, které se mají seřadit.

Výjimky

keys je null.

index je menší než dolní mez keys.

-nebo-

length je menší než nula.

items není nulla dolní mez keys neodpovídá dolní hranici items.

-nebo-

items není nulla délka keys je větší než délka items.

-nebo-

index a length nezadávají platný rozsah v keysArray.

-nebo-

items není nulla index a length nezadávají platný rozsah v itemsArray.

Jeden nebo více prvků v keysArray neimplementují obecné rozhraní IComparable<T>.

Příklady

Následující příklad kódu ukazuje Sort<TKey,TValue>(TKey[], TValue[]), Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)a Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) přetížení obecné metody pro řazení dvojic polí, které představují klíče a hodnoty.

Příklad kódu definuje alternativní porovnávač pro řetězce s názvem ReverseCompare, který implementuje IComparer<string> (IComparer(Of String) v jazyce Visual Basic, IComparer<String^> v obecném rozhraní jazyka Visual C++). Porovnávač volá metodu CompareTo(String) a vrátí pořadí porovnávaných hodnot tak, aby řetězce seřadily hodnoty high-to-low místo hodnoty low-to-high.

Příklad kódu vytvoří a zobrazí pole názvů dinosaurů (klíče) a pole celých čísel představující maximální délku každého dinosaura v metrech (hodnoty). Pole se pak seřadí a zobrazí několikrát:

Poznámka

Volání obecných metod nevypadají jinak než volání jejich negenerických protějšků, protože Jazyk Visual Basic, C# a C++ odvozují typ parametru obecného typu z typu prvních dvou argumentů. Pokud použijete Ildasm.exe (IL Disassembler) k prozkoumání jazyka MSIL (Microsoft Intermediate Language), můžete vidět, že se volají obecné metody.

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 = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

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

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Poznámky

Každý klíč v keysArray má odpovídající položku v itemsArray. Při přemísťování klíče během řazení se odpovídající položka v itemsArray podobně přeloží. Proto je itemsArray seřazena podle uspořádání odpovídajících klíčů v keysArray.

Každý klíč v zadaném rozsahu prvků v keysArray musí implementovat IComparable<T> obecné rozhraní, aby bylo možné porovnávat s každým dalším klíčem.

Můžete řadit, pokud existuje více položek než klíčů, ale položky, které nemají odpovídající klíče, nebudou seřazeny. Nelze řadit, pokud existuje více klíčů než položek; to vyvolá ArgumentException.

Pokud se řazení úspěšně nedokončí, výsledky se nedefinují.

Tato metoda používá algoritmus introspektivního řazení (introsort) následujícím způsobem:

  • Pokud je velikost oddílu menší nebo rovna 16 prvkům, použije algoritmus řazení vložení.

  • Pokud počet oddílů překračuje 2 * ProtokolN, kde N je oblast vstupního pole, použije heapsort algoritmus.

  • V opačném případě používá algoritmus Quicksort.

Tato implementace provádí nestabilní řazení; to znamená, že pokud jsou dva prvky stejné, jejich pořadí nemusí být zachováno. Stabilní řazení naopak zachovává pořadí prvků, které jsou stejné.

Tato metoda je operace nprotokolu O(n), kde n je length.

Viz také

Platí pro

.NET 9 a další verze
Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0