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

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

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

Есть метод обычной быстрой сортировки, но нужно, чтобы сортировались только нечетные (по расположению) элементы, т.е элементы с четным индексом. По заданию нужно использовать только быструю сортировку. Несколько часов уже не могу ничего придумать.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication11
  7. {
  8. class Program
  9. {
  10. static void QSort(int[] M, int LG, int PG)
  11. {
  12. int i = LG, j = PG, T;
  13. double X = M[((LG + PG) / 2)];
  14. while (i <= j)
  15. {
  16. while (M[i] < X) i += 1;
  17. while (M[j] > X) j -= 1;
  18. if (i <= j)
  19. {
  20. T = M[i]; M[i] = M[j]; M[j] = T;
  21. i += 1; j -= 1;
  22. }
  23. }
  24. if (LG < j) QSort(M, LG, j);
  25. if (i < PG) QSort(M, i, PG);
  26. }
  27. static void Main(string[] args)
  28. {
  29. const int k = 9;
  30. int[] M = new int[k];
  31. Random rand = new Random();
  32. for (int i = 0; i < k; i++) { M[i] = rand.Next(-9, 9); }
  33. Console.WriteLine("Вывод исходного массива");
  34. for (int i = 0; i < M.Length; i++) { Console.Write(M[i] + " "); }
  35. Console.WriteLine();
  36. QSort(M, 0, M.Length - 1);
  37. Console.WriteLine("\n\nВывод отсортированного массива");
  38. for (int i = 0; i < M.Length; i++) { Console.Write(M[i] + " "); }
  39. }
  40. }
  41. }

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

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4.  
  5. class Program
  6. {
  7.     private static IEnumerable<int> QuickSort(IEnumerable<int> en)
  8.     {
  9.         int count = en.Count();
  10.         if (count < 2) return en;
  11.         int fst = en.First();
  12.         if (count == 2) return fst > en.Last() ? en.Reverse() : en;
  13.         ILookup<int, int> lookup = en.ToLookup(x => x.CompareTo(fst));
  14.         return QuickSort(lookup[-1]).Concat(lookup[0]).Concat(QuickSort(lookup[1]));
  15.     }
  16.  
  17.     public static void Main()
  18.     {
  19.         int[] arr = Enumerable.Repeat(new Random(), 20).Select(r => r.Next(100)).ToArray();
  20.         Console.WriteLine(String.Join(", ", arr));
  21.         Queue<int> que = new Queue<int>(QuickSort(arr.Where((_, i) => i % 2 == 0)));
  22.         for (int i = 0; i < arr.Length; i += 2)
  23.         {
  24.             arr[i] = que.Dequeue();
  25.         }
  26.         Console.WriteLine(String.Join(", ", arr));
  27.     }
  28. }

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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