Написать модуль сортировки - C#

Узнай цену своей работы

Формулировка задачи:

Написать модуль сортировки, включающий в себя: 1. Метод, реализующий упорядочивание массива произвольного типа. Принцип сравнения двух элементов должен передаваться в метод через делегат. Стандартные инструменты типа Array.Sort и IComparable не использовать 2. Метод, позволяющий запустить в сортировку в отдельном потоке выполнения; 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();
       }
   }
Создал такой класс который содержит метод сортировки и метод, запускающий в новом потоке. Помогите с написанием 3 пункта.
значение я возвращаю в 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();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы