Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
36
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

4.Сортировка и поиск

В классе Array реализован алгоритм быстрой сортировки (Quicksort) элементов массива. Метод Sort требует от элементов реализации интерфейса IComparable. Простые типы, такие как System.String и System.Int32, реализуют IComparable, так что можно сортировать элементы, относящиеся к этим типам.

C помощью разных вариантов метода Sort можно отсортировать массив полностью или в заданных пределах либо отсортировать два массива, содержащих соответствующие пары «ключ-значение». После сортировки в массиве можно осуществить эффективный поиск, используя разные варианты метода BinarySearch. Пример:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

int[] myArr = { 4, 5, -183, 12, 34, 0, 2, -13 };

Console.WriteLine("Исходный массив чисел: ");

foreach (int x in myArr)

Console.Write("\t{0}", x);

// Реализуем сортировку массива

Console.WriteLine("\n\nОтсортированный массив:");

Array.Sort(myArr);

foreach (int x in myArr)

Console.Write("\t{0}", x);

// Организуем поиск числа 12

Console.WriteLine("\n\nПоиск числа:");

int search = Array.BinarySearch(myArr, 12);

Console.WriteLine("Число 12 находится на {0} позиции", search + 1);

Console.WriteLine("Для продолжения нажмите любую клавишу . . . ");

Console.ReadLine();

}

}

}

Рис. 4. 1. Результат работы кода выше

3.8.4. Понятие «Кортеж» Понятие «Кортеж»

Массивы комбинируют объекты одного типа, а кортежи (Tuple) могут комбинировать объекты различных типов. Понятие кортежей происходит из языков функционального программирования, таких как F#, где они часто используются. С появлением .NET Framework 4 кортежи стали доступны в среде .NET для всех языков .NET.

В среде .NET определены восемь обобщённых классов Tuple и один статический класс Tuple, который служит «фабрикой» кортежей.

Существуют различные обобщённые классы Tuple для поддержки различного количества элементов; например, Tuple<T1> содержит один элемент, Tuple<T1, Т2> — два элемента и прочее. Элементы кортежа могут быть доступны через свойства Item1, Item2, ..., ItemM.

В случае если имеется более восьми элементов, которые нужно включить в кортеж, можно использовать определение класса Tuple с восемью параметрами. Последний параметр называется TRest, в котором должен передаваться сам кортеж. Таким образом, есть возможность создавать кортежи с любым количеством параметров.

Рассмотрим пример использования кортежей:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

// Данный метод возвращает кортеж с 4-мя

// разными значениями

static Tuple<int, float, string, char> Corteg(int a, string name)

{

int sqr = a * a;

float sqrt = (float)(Math.Sqrt(a));

string s = "Привет, " + name;

char ch = (char)(name[0]);

return Tuple.Create<int, float, string, char>(sqr, sqrt, s, ch);

}

static void Main()

{

var myTuple = Corteg(25, "Кто-то");

Console.WriteLine("{0}\n25 в квадрате: {1}\nКвадратный корень из 25: "

+ "{2}\nПервый символ в имени: {3}", myTuple.Item3, myTuple.Item1, myTuple.Item2, myTuple.Item4);

// Создаём кортеж произвольной размерности

var myTuple2 = Tuple.Create<int, char, string, decimal, float, byte, short, Tuple<int,

float, string, char>>(12, 'C', "Имя", 12.3892m, 0.5f, 120, 4501, myTuple);

Console.WriteLine("\nВыводим элементы кортежа myTuple2:\n{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}", myTuple2.Item1, myTuple2.Item2, myTuple2.Item3, myTuple2.Item4, myTuple2.Item5, myTuple2.Item6, myTuple2.Item7);

Console.WriteLine("\nДля продолжения нажмите любую клавишу . . . ");

Console.ReadLine();

}

}

}

Рис. 1. Результат работы кода выше