Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка) - C#
Формулировка задачи:
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом массиве.
Класс описать с помощью обобщенных алгоритмов Generics.
Сортировку реализовать одним из методов: сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка).
Решение задачи: «Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)»
textual
Листинг программы
class Search<T> where T : IComparable
{
private T[] _mas;
public Search(params T[] mas)
{
_mas = mas;
}
private void Sort()
{
int length = _mas.Length;
for (int i = 0; i < length - 1; i++)
{
int min = i;
for (int j = i + 1; j < length; j++)
{
if (_mas[j].CompareTo(_mas[min]) < 0)
{
min = j;
}
}
if (min != i)
{
T temp = _mas[i];
_mas[i] = _mas[min];
_mas[min] = temp;
}
}
}
public int? BinarySearch(T value)
{
// Пустой массив
if (_mas.Length == 0) return null;
// Вызов сортировки
Sort();
// Элемент отсутствует
if (_mas[0].CompareTo(value) > 0 || _mas[_mas.Length - 1].CompareTo(value) < 0) return null;
int first = 0;
int last = _mas.Length;
while (first < last)
{
int mid = first + (last - first)/2;
if (value.CompareTo(_mas[mid]) <= 0) last = mid;
else first = mid + 1;
}
// Элемент найден, возвращаем индекс в массиве
if (_mas[last].CompareTo(value) == 0) return last;
// Элемент не найден
else return null;
}
}
public static void Main(string[] args)
{
int[] mas = { 10, 2, 45, 4, 6131, 10, 1, 2, 3, 4, 6, 7, 89, 1, 0, 10, 8, 9 };
var s = new Search<int>(mas);
int? binarySearch = s.BinarySearch(45);
if (binarySearch == null)
{
Console.WriteLine("Элемент не найден");
}
else
{
Console.WriteLine("Индекс элмента {0} со значениям {1}", binarySearch, mas[(int) binarySearch]);
}
}