IEquatable относиться к обобщенные интерфейсы. Этот интерфейс указываются по аналогии обобщенным классам. Иногда нам необходимо сравнивать два экземпляра типа, допустим у нас есть класс Car с одинаковыми параметрами, цвета и марки автомобиля. Как в таком случаи найти 2 аналогичный автомобиля из списка? Для решения данной задачи могли бы просто переопределить Equals или оператор ==. Но […]
Рубрика: C#
Решения задачи с Ulearn
Практика «Статистика» Продолжайте в том же проекте linq-slideviews. В файле StatisticsTask реализуйте метод GetMedianTimePerSlide. Он должен работать так. Обозначим T(U, S) время между посещением пользователем U слайда S и ближайшим следующим посещением тем же пользователем U какого-то другого слайда S2 != S. T(U, S) можно считать примерной оценкой того, сколько времени пользователь U провел на […]
Решения задачи с Ulearn
Практика «Лямбды и делегаты» Скачайте проект rocket. В этой серии задач Каракуля на ракете очень хочет попасть в дыру, несмотря на все гравитационные аномалии! В этой задаче в классе ForcesTask нужно реализовать три вспомогательных метода, преобразующих одни делегаты в другие. Чтобы лучше понимать зачем эти методы нужны, изучите проект, в частности места использования этих методов. […]
Решения задачи с Ulearn
Практика «Отрезок» Продолжаем разработку геометрической библиотеки. Создайте класс Segment, представляющий отрезок прямой. Концы его отрезков должны задаваться двумя публичными полями: Begin и End типа Vector. Добавьте метод Geometry.GetLength, вычисляющий длину сегмента, и метод Geometry.IsVectorInSegment(Vector, Segment), проверяющий, что задаваемая вектором точка лежит в отрезке. Сохраните функциональность предыдущего этапа. Стоимость решения этой задачи всего 100 рублей, купи […]
Пример программы сортировки слиянием Merge Sort на C#
В этой статье мы обсудим сортировку слиянием в C# Слияние сортировка является одним из популярных алгоритмов сортировки в C#, поскольку он использует минимальное количество сравнений. Идея сортировки слиянием заключается в том, что она объединяет два отсортированных списка. Сортировка слиянием имеет порядок O(nlogn) Вот высокоуровневое представление алгоритма сортировки слиянием:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
using System; using System.Collections.Generic; using System.Text; namespace CSharpMergeSort { class Mergesort { static public void DoMerge(int[] numbers, int left, int mid, int right) { int[] temp = new int[25]; int i, left_end, num_elements, tmp_pos; left_end = (mid - 1); tmp_pos = left; num_elements = (right - left + 1); while ((left <= left_end) && (mid <= right)) { if (numbers[left] <= numbers[mid]) temp[tmp_pos++] = numbers[left++]; else temp[tmp_pos++] = numbers[mid++]; } while (left <= left_end) temp[tmp_pos++] = numbers[left++]; while (mid <= right) temp[tmp_pos++] = numbers[mid++]; for (i = 0; i < num_elements; i++) { numbers[right] = temp[right]; right--; } } static public void MergeSort_Recursive(int[] numbers, int left, int right) { int mid; if (right > left) { mid = (right + left) / 2; MergeSort_Recursive(numbers, left, mid); MergeSort_Recursive(numbers, (mid + 1), right); DoMerge(numbers, left, (mid + 1), right); } } static void Main(string[] args) { int[] numbers = { 3, 8, 7, 5, 2, 1, 9, 6, 4 }; int len = 9; Console.WriteLine("MergeSort рекурсивным методом"); MergeSort_Recursive(numbers, 0, len - 1); for (int i = 0; i < 9; i++) Console.WriteLine(numbers[i]); Console.ReadKey(); } } } |
Вывод: MergeSort рекурсивным методом 1 […]