Написать модуль сортировки - C#
Формулировка задачи:
Написать модуль сортировки, включающий в себя:
1. Метод, реализующий упорядочивание массива произвольного типа. Принцип сравнения
двух элементов должен передаваться в метод через делегат. Стандартные инструменты типа
Array.Sort и IComparable не использовать
2. Метод, позволяющий запустить в сортировку в отдельном потоке выполнения;
3. Событие, сигнализирующее о завершении сортировки.
Продемонстрировать работу модуля в многопоточном режиме.
Создал такой класс который содержит метод сортировки и метод, запускающий в новом потоке.
Помогите с написанием 3 пункта.
Начал писать. Вот что набросал.
public delegate bool SortingMethod<T>(T x1, T x2); class SortingUnit<T> { public event EventHandler<SortingEventArgs<T>> SortingFinished; public void CustomSort (T[] arr, SortingMethod<T> sortingMethod) { bool isSorted = false; T temp; while (!isSorted) { isSorted = true; for (int i = arr.GetLowerBound(0); i < arr.GetUpperBound(0); i++) { if (sortingMethod(arr[i], arr[i + 1])) { temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; isSorted = false; } } } SortingFinished?.Invoke(this, new SortingEventArgs<T>(arr)); } public void RunSortInNewThread(T[] arr, SortingMethod<T> sortingMethod) { ThreadStart thStart = new ThreadStart( () => CustomSort(arr, sortingMethod) ); Thread th = new Thread(thStart); th.Start(); } }
значение я возвращаю в eventargs вот такой класс
class SortingEventArgs<T> : EventArgs { public T[] SortedArray { get; } public SortingEventArgs(T[] sortedArray) { if (sortedArray!=null) { this.SortedArray = sortedArray; } else { throw new ArgumentException("SortedArray can't be null"); } } }
Решение задачи: «Написать модуль сортировки»
textual
Листинг программы
public class SortingModule<T> { public event EventHandler SortingFinished; public void Sort(T[] arr, Func<T, T, int> compare) { if (compare == null) { throw new ArgumentNullException(); } for (int i = 0; i < arr.Length; i++) { for (int j = i + 1; j < arr.Length; j++) { if (compare(arr[j], arr[i]) > 0) { var tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; } } } SortingFinished?.Invoke(this, EventArgs.Empty); } public void CreateThreadForSorting(T[] arr, Func<T, T, int> compare) { Thread th = new Thread(() => this.Sort(arr, compare)); th.Start(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д