Быстрая сортировка на четность нечетность чисел - C#

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

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

Есть собственный список. А так же реализован алгоритм быстрой сортировки.
Листинг программы
  1. public void Sort(IMyComparer<T> comparer)
  2. {
  3. Sort(0, Count - 1, comparer);
  4. }
  5. public void Sort(int low, int high, IMyComparer<T> comparer)
  6. {
  7. ThrowIfIsOutOfRange(low, high);
  8. T pivot = array[low + (high - low) / 2];
  9. // also like (high+low)/2 but don't owerflow array on big data
  10. int i = low;
  11. int j = high;
  12. Partition(ref i, ref j, pivot, comparer);
  13. if (i < high)
  14. Sort(i, high, comparer);
  15. if (low < j)
  16. Sort(low, j, comparer);
  17. }
  18. private void Partition(ref int i, ref int j, T pivot, IMyComparer<T> comparer)
  19. {
  20. while (i < j)
  21. {
  22. while (comparer.Compare(array[i], pivot) < 0)
  23. i++;
  24. while (comparer.Compare(array[j], pivot) > 0)
  25. j--;
  26. if (i <= j)
  27. {
  28. T temp = array[i];
  29. array[i] = array[j];
  30. array[j] = temp;
  31. i++;
  32. j--;
  33. }
  34. }
  35. }
Где IMyComparer у нас интерфейс с одним методом. (да знаю, в таком случае лучше использовать делегат, но у нас задание реализовать с помощью интерфейса).
Листинг программы
  1. interface IMyComparer<T>
  2. {
  3. int Compare(T left, T right);
  4. }
Ну и сама сортировка выглядит следующим образом:
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. MyList<int> list = new MyList<int>();
  4. Random rnd = new Random();
  5. for (int i = 0; i <= 10; i++)
  6. {
  7. list.Add(rnd.Next(10));
  8. }
  9. MyComparer myComperer = new MyComparer();
  10. list.Sort(myComperer);
  11. for (int i = 0; i < list.Count; i++)
  12. {
  13. Console.WriteLine("{0}", list[i]);
  14. }
  15. Console.ReadKey(true);
  16. }
  17. sealed class MyComparer : IMyComparer<int>
  18. {
  19. public int Compare(int left, int right)
  20. {
  21. //Discending sort
  22. return -left.CompareTo(right);
  23. }
  24. }
Собственно вопрос как в данном случае реализовать сортировку четных не четных чисел. Сам алгоритм сортировки должен быть в функции Compare. Я думаю, что проблема в реализации, ведь мы в сортировке сравниваем некое число с опорным элементом. Как обойти? И есть ли толк от быстрой сортировки в данном случае, ведь нам по идее надо будет разделить в последствии наш массив на две части, и отсортировать его подчасти. В идеале - массив делят на две части, левая например с четными елементами, правая с нечетными. Потом уже каждая часть сортируется по отдельности по возрастанию. У кого какие идеи?

Решение задачи: «Быстрая сортировка на четность нечетность чисел»

textual
Листинг программы
  1. sealed class MyComparer : IMyComparer<int>
  2. {
  3.    public int Compare(int left, int right)
  4.    {
  5.       int a = left & 1;
  6.       int b = right & 1;
  7.      
  8.       return (a == b) ? left.CompareTo(right) : a.CompareTo(b);
  9.    }
  10. }

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


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

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

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы