Объектно-ориентированное программирование на С#. Андрианова А.А - 130 стр.

UptoLike

130
public static void Sort<T>(CompareDelegate <T> comparer,
T[] items, int left, int right)
{
int i = left;
int j = right;
T center = items[(left + right) / 2];
while (i <= j)
{
// вызов операции сравнения через делегат
while (comparer(center, items[i]))
i++;
while (comparer(items[j], center))
j--;
if (i <= j)
{
T x = items[i];
items[i] = items[j];
items[j] = x;
i++;
j--;
}
}
if (left < j)
Sort(comparer, items, left, j);
if (right > i)
Sort(comparer, items, i, right);
}
Приведем примеры использования данной версии функции сортировки
по возрастанию и по убывания массива целых чисел.
int[] a = {1, 2, 10, 4, -5, 0,-15,100,45,13,-250};
Console.WriteLine("Исходный массив");
foreach (int i in a)
Console.Write(i.ToString() + " ");
Console.WriteLine();
// создание объекта, предназначенного
// для сравнения целых чисел
MyComparer<int> c = new MyComparer<int>();
// создание делегата, указывающего на функцию
// сравнения целых чисел
// Greater объекта c
CompareDelegate <int> g = new
CompareDelegate<int>(c.Greater);
// вызов функции сортировки массива по возрастанию
// с использованием делегата g
      public static void Sort(CompareDelegate  comparer,
                                  T[] items, int left, int right)
      {
         int i = left;
         int j = right;
         T center = items[(left + right) / 2];

          while (i <= j)
          {
             // вызов операции сравнения через делегат
             while (comparer(center, items[i]))
                i++;
             while (comparer(items[j], center))
                j--;

              if (i <= j)
              {
                 T x = items[i];
                 items[i] = items[j];
                 items[j] = x;
                 i++;
                 j--;
              }
          }

          if (left < j)
             Sort(comparer, items, left, j);
          if (right > i)
             Sort(comparer, items, i, right);
      }

      Приведем примеры использования данной версии функции сортировки
по возрастанию и по убывания массива целых чисел.

      int[] a = {1, 2, 10, 4, -5, 0,-15,100,45,13,-250};
      Console.WriteLine("Исходный массив");
      foreach (int i in a)
         Console.Write(i.ToString() + " ");
      Console.WriteLine();

      // создание объекта, предназначенного
      // для сравнения целых чисел
      MyComparer c = new MyComparer();

      // создание делегата, указывающего на функцию
      // сравнения целых чисел
      // Greater объекта c
      CompareDelegate  g = new
                                 CompareDelegate(c.Greater);

      // вызов функции сортировки массива по возрастанию
      // с использованием делегата g

130